Eventos
17 de mar., 23 - 21 de mar., 23
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraNão há mais suporte para esse navegador.
Atualize o Microsoft Edge para aproveitar os recursos, o suporte técnico e as atualizações de segurança mais recentes.
Aplicativos nativos de nuvem geralmente exigem soluções de mensagens escalonáveis que fornecem recursos como filas de mensagens e tópicos e assinaturas. A integração do .NET Aspire simplifica o processo de conexão a diferentes provedores de mensagens, como Azure Service Bus. Neste tutorial, você criará um aplicativo ASP.NET Core que usa integrações .NET Aspire para se conectar a Azure Service Bus para criar um sistema de notificação. Mensagens submetidas serão enviadas para um tópico do Barramento de Serviço para serem consumidas por assinantes. Você aprenderá a:
Para trabalhar com .NET.NET Aspire, você precisa do seguinte instalado localmente:
Para obter mais informações, consulte .NET.NET Aspirede instalação e ferramentas e .NET.NET Aspiredo SDK.
Além dos pré-requisitos anteriores, você também precisa instalar a CLI do Azure. Para instalar o CLI Azure, siga as instruções no guia de instalação da CLI Azure.
Para este tutorial, você precisará de acesso a um namespace Azure Service Bus com um tópico e uma assinatura configurados. Use uma das seguintes opções para configurar os recursos necessários:
Alternativamente:
Azure CLI: execute os seguintes comandos na CLI Azure ou no CloudShell para configurar os recursos de Azure Service Bus necessários:
az group create -n <your-resource-group-name> --location eastus
az servicebus namespace create -g <your-resource-group-name> --name <your-namespace-name> --location eastus
az servicebus topic create -g <your-resource-group-name> --namespace-name <your-namespace-name> --name notifications
az servicebus topic subscription create -g <your-resource-group-name> --namespace-name <your-namespace-name> --topic-name notifications --name mobile
Observação
Substitua os espaços reservados seu-nome-de-grupo-de-recursos e seu-nome-de-namespace pelos seus próprios valores. Os nomes de namespace do Barramento de Serviço devem ser globalmente exclusivos em Azure.
Este início rápido pode ser concluído usando a autenticação sem senha ou uma cadeia de conexão. Conexões sem senha usam Azure Active Directory e RBAC (controle de acesso baseado em função) para se conectar a um namespace do Barramento de Serviço. Você não precisa se preocupar em ter uma cadeia de conexão codificada em código em seu código, um arquivo de configuração ou em um armazenamento seguro, como Azure Key Vault.
Você também pode usar uma cadeia de conexão para se conectar a um namespace do Barramento de Serviço, mas a abordagem sem senha é recomendada para aplicativos do mundo real e ambientes de produção. Para obter mais informações, leia sobre autenticação e autorização
No namespace do Barramento de Serviço, atribua a seguinte função à conta de usuário com a qual você se conectou ao Visual Studio ou à CLI do Azure:
Para criar um novo aplicativo .NET Aspire Starter, você pode usar Visual Studio, Visual Studio Codeou a CLI do .NET.
Visual Studio fornece modelos .NET Aspire que cuidam de algumas configurações iniciais para você. Conclua as seguintes etapas para criar um projeto para este início rápido:
Na parte superior do Visual Studio, navegue até Arquivo>Novo>Projeto.
Na janela de diálogo, pesquise Aspire e selecione .NET.NET Aspire Aplicativo Inicial. Selecione Próximo.
Na tela , configure seu novo projeto:
Na tela Informações adicionais:
Visual Studio cria uma nova solução que é estruturada para utilizar .NET Aspire.
Visual Studio Code fornece modelos de projeto .NET Aspire que lidam com algumas configurações iniciais para você. Conclua as seguintes etapas para criar um projeto para este início rápido:
Se você ainda não tiver instalado os modelos de .NET.NET Aspire, execute o seguinte comando dotnet new install
:
dotnet new install Aspire.ProjectTemplates
O comando da CLI .NET anterior garante que você tenha os modelos de .NET Aspire disponíveis. Para criar o aplicativo .NET.NET Aspire Starter a partir do modelo, execute o seguinte comando dotnet new
:
dotnet new aspire-starter --use-redis-cache --output AspireSample
Para obter mais informações, consulte novodotnet . A CLI do .NET cria uma nova solução estruturada para usar .NET Aspire.
Em seguida, adicione um projeto Worker Service à solução para recuperar e processar mensagens de e para Azure Service Bus.
AspireSample
no nível superior e selecione Adicionar>Novo projeto.
Visual Studio adiciona o projeto à sua solução e atualiza o arquivo Program.cs do projeto AspireSample.AppHost
com uma nova linha de código:
builder.AddProject<Projects.AspireSample_WorkerService>(
"aspiresample-workerservice");
Visual Studio ferramentas adicionaram essa linha de código para registrar seu novo projeto com o objeto IDistributedApplicationBuilder, que permite recursos de orquestração que você explorará mais tarde.
No do Gerenciador de Soluções
Para filtrar os modelos de projeto, insira Worker na caixa de pesquisa e selecione o modelo Worker Service encontrado:
Escolha o modelo de Worker Service e insira o nome do projeto como AspireSample.WorkerService.
Selecione diretório padrão para criar o projeto no mesmo diretório que a solução.
Selecione Criar projeto para adicionar o projeto à solução.
Clique com o botão direito do mouse no projeto AspireSample.AppHost no Gerenciador de Soluções e selecione Adicionar Referência do Projeto:
Adicione a seguinte linha de código ao arquivo
builder.AddProject<Projects.AspireSample_WorkerService>(
"aspiresample-workerservice");
No diretório raiz do aplicativo, use o comando dotnet new para criar um novo aplicativo Worker Service:
dotnet new worker --name AspireSample.WorkerService
Use o comando dotnet sln
para adicionar o projeto à solução:
dotnet sln AspireSample.sln add AspireSample.WorkerService/AspireSample.WorkerService.csproj
Use o comando dotnet add
para adicionar uma referência de projeto entre o .AppHost e o projeto .WorkerService.
dotnet add AspireSample.AppHost/AspireSample.AppHost.csproj reference AspireSample.WorkerService/AspireSample.WorkerService.csproj
Adicione a seguinte linha de código ao arquivo
builder.AddProject<Projects.AspireSample_WorkerService>(
"aspiresample-workerservice");
A estrutura de solução concluída deve ser semelhante à seguinte, supondo que o diretório de nível superior seja nomeado aspire-messaging:
└───📂 aspire-messaging
├───📂 AspireSample.WorkerService
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.WorkerService.csproj
│ ├─── Program.cs
│ └─── Worker.cs
├───📂 AspireSample.ApiService
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.ApiService.csproj
│ └─── Program.cs
├───📂 AspireSample.AppHost
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.AppHost.csproj
│ └─── Program.cs
├───📂 AspireSample.ServiceDefaults
│ ├─── AspireSample.ServiceDefaults.csproj
│ └─── Extensions.cs
├───📂 AspireSample.Web
│ ├───📂 Components
│ │ ├───📂 Layout
│ │ │ ├─── MainLayout.razor
│ │ │ ├─── MainLayout.razor.css
│ │ │ ├─── NavMenu.razor
│ │ │ └─── NavMenu.razor.css
│ │ ├───📂 Pages
│ │ │ ├─── Counter.razor
│ │ │ ├─── Error.razor
│ │ │ ├─── Home.razor
│ │ │ └─── Weather.razor
│ │ ├─── _Imports.razor
│ │ ├─── App.razor
│ │ └─── Routes.razor
│ ├───📂 Properties
│ │ └─── launchSettings.json
│ ├───📂 wwwroot
│ │ ├───📂 bootstrap
│ │ │ ├─── bootstrap.min.css
│ │ │ └─── bootstrap.min.css.map
│ │ ├─── app.css
│ │ └─── favicon.png
│ ├─── appsettings.Development.json
│ ├─── appsettings.json
│ ├─── AspireSample.Web.csproj
│ ├─── Program.cs
│ └─── WeatherApiClient.cs
└─── AspireSample.sln
Adicione a integração .NET Aspire Azure Service Bus ao seu aplicativo AspireSample.ApiService:
Nodo Gerenciador de Soluções
Adicione o seguinte item de <PackageReference>
ao elemento <ItemGroup>
:
<ItemGroup>
<PackageReference Include="Aspire.Azure.Messaging.ServiceBus"
Version="8.0.1" />
</ItemGroup>
dotnet add package Aspire.Azure.Messaging.ServiceBus
No arquivo Program.cs do projeto AspireSample.ApiService, adicione uma chamada ao método de extensão AddAzureServiceBusClient
, substituindo a chamada existente para AddServiceDefaults
:
// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");
Para obter mais informações, consulte AddAzureServiceBusClient.
Esse método realiza as seguintes tarefas:
No arquivo appsettings.json do mesmo projeto, adicione as informações de conexão correspondentes:
{
// Existing configuration is omitted for brevity.
"ConnectionStrings": {
"serviceBusConnection": "{your_namespace}.servicebus.windows.net"
}
}
Observação
Substitua {your_namespace} nas URIs de serviço pelo nome do seu próprio namespace do Barramento de Serviço.
A API deve fornecer um ponto de extremidade para receber dados e publicá-los no tópico do Barramento de Serviço e transmitir aos assinantes. Adicione o seguinte endpoint ao projeto AspireSample.ApiService para enviar uma mensagem ao tópico do Barramento de Serviço. Substitua todo o conteúdo do arquivo Program.cs pelo seguinte código C#:
using Azure.Messaging.ServiceBus;
var builder = WebApplication.CreateBuilder(args);
// Add service defaults & Aspire integrations.
builder.AddServiceDefaults();
builder.AddAzureServiceBusClient("serviceBusConnection");
// Add services to the container.
builder.Services.AddProblemDetails();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseExceptionHandler();
app.MapPost("/notify", static async (ServiceBusClient client, string message) =>
{
var sender = client.CreateSender("notifications");
// Create a batch
using ServiceBusMessageBatch messageBatch =
await sender.CreateMessageBatchAsync();
if (messageBatch.TryAddMessage(
new ServiceBusMessage($"Message {message}")) is false)
{
// If it's too large for the batch.
throw new Exception(
$"The message {message} is too large to fit in the batch.");
}
// Use the producer client to send the batch of
// messages to the Service Bus topic.
await sender.SendMessagesAsync(messageBatch);
Console.WriteLine($"A message has been published to the topic.");
});
app.MapDefaultEndpoints();
app.Run();
Adicione a integração .NET Aspire Azure Service Bus ao projeto AspireSample.WorkerService. Siga as mesmas etapas que você seguiu antes quando adicionou o pacote NuGet Aspire.Azure.Messaging.ServiceBus ao projeto AspireSample.ApiService. Depois que for adicionado, você pode configurar o serviço de trabalho para processar mensagens do tópico do Service Bus.
No arquivo Program.cs do projeto AspireSample.WorkerService, substitua o código existente com o seguinte:
using AspireSample.WorkerService;
var builder = Host.CreateApplicationBuilder(args);
builder.AddAzureServiceBusClient("serviceBusConnection");
builder.Services.AddHostedService<Worker>();
var host = builder.Build();
host.Run();
O método AddAzureServiceBusClient
realiza as seguintes tarefas:
No arquivo appsettings.json do projeto AspireSample.WorkerService, adicione as informações de conexão correspondentes:
{
// Existing configuration is omitted for brevity.
"ConnectionStrings": {
"serviceBusConnection": "{your_namespace}.servicebus.windows.net"
}
}
Observação
Certifique-se de substituir {your_namespace} nas URIs de Serviço pelo nome do seu namespace do Barramento de Serviço.
Quando uma nova mensagem é colocada na fila de mensagens messages
, o serviço de processamento deve recuperar, processar e excluir a mensagem. Atualize a classe Worker.cs para corresponder ao seguinte código:
using Azure.Messaging.ServiceBus;
namespace AspireSample.WorkerService;
public sealed class Worker(
ILogger<Worker> logger,
ServiceBusClient client) : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
var processor = client.CreateProcessor(
"notifications",
"mobile",
new ServiceBusProcessorOptions());
// Add handler to process messages
processor.ProcessMessageAsync += MessageHandler;
// Add handler to process any errors
processor.ProcessErrorAsync += ErrorHandler;
// Start processing
await processor.StartProcessingAsync();
logger.LogInformation("""
Wait for a minute and then press any key to end the processing
""");
Console.ReadKey();
// Stop processing
logger.LogInformation("""
Stopping the receiver...
""");
await processor.StopProcessingAsync();
logger.LogInformation("Stopped receiving messages");
}
}
async Task MessageHandler(ProcessMessageEventArgs args)
{
string body = args.Message.Body.ToString();
logger.LogInformation("Received: {Body} from subscription.", body);
// Complete the message. messages is deleted from the subscription.
await args.CompleteMessageAsync(args.Message);
}
// Handle any errors when receiving messages
Task ErrorHandler(ProcessErrorEventArgs args)
{
logger.LogError(args.Exception, "{Error}", args.Exception.Message);
return Task.CompletedTask;
}
}
O aplicativo de exemplo agora está pronto para teste. Verifique se os dados enviados à API são enviados para o tópico Azure Service Bus e consumidos pelo serviço de trabalho do assinante:
dotnet run --project AspireSample.AppHost
. O aplicativo de painel .NET.NET Aspire deve ser aberto no navegador.Na página de recursos, na linha do apiservice, localize o link nos Endpoints que abre o endpoint weatherforecast
. Observe o número da porta HTTPS.
No painel .NET.NET Aspire, navegue até os logs para o projeto aspiresample-workerservice.
Em uma janela de terminal, use o comando curl
para enviar uma mensagem de teste à API:
curl -X POST -H "Content-Type: application/json" https://localhost:{port}/notify?message=hello%20aspire
Certifique-se de substituir {port} pelo número da porta fornecido anteriormente.
Volte para os logs de aspiresample-workerservice. Você deverá ver a mensagem de teste impressa nos logs de saída.
Parabéns! Você criou e configurou uma API de ASP.NET Core que se conecta a Azure Service Bus usando integrações Aspire.
Execute o seguinte comando Azure CLI para excluir o grupo de recursos quando você não precisar mais dos recursos de Azure que você criou. Excluir o grupo de recursos também exclui os recursos contidos nele.
az group delete --name <your-resource-group-name>
Para obter mais informações, consulte Liberar recursos no Azure.
Comentários do .NET Aspire
O .NET Aspire é um projeto código aberto. Selecione um link para fornecer comentários:
Eventos
17 de mar., 23 - 21 de mar., 23
Junte-se à série de encontros para criar soluções de IA escaláveis com base em casos de uso do mundo real com outros desenvolvedores e especialistas.
Registrar agoraTreinamento
Módulo
Enviar mensagens com o RabbitMQ em um projeto do .NET Aspire - Training
Neste módulo, você aprenderá sobre o agente de mensagens do RabbitMQ e como usá-lo para desacoplar microsserviços, garantindo que eles possam se comunicar de forma confiável. Você também verá como o .NET Aspire facilita a integração com o RabbitMQ.
Documentação
visão geral das integrações .NET.NET Aspire - .NET Aspire
Explore os conceitos fundamentais das integrações de .NET.NET Aspire e saiba como integrá-los aos seus aplicativos.
Conectar um aplicativo ASP.NET Core a integrações de armazenamento .NET Aspire - .NET Aspire
Saiba como conectar um aplicativo ASP.NET Core a integrações de armazenamento .NET Aspire.
integração .NET AspireElasticsearch - .NET Aspire
Saiba como usar a integração de .NET AspireElasticsearch, que inclui integrações de hospedagem e cliente.