Comece a usar o AWS Message Processing Framework para .NET - AWS SDK para .NET (V3)

A versão 4 (V4) do AWS SDK para .NET foi lançada!

Para começar a usar a nova versão do SDK, consulte o Guia do desenvolvedor AWS SDK para .NET (V4), especialmente o tópico sobre migração para a versão 4.

Comece a usar o AWS Message Processing Framework para .NET

Antes de começar, assegure-se de ter configurado o seu ambiente e seu projeto. Revise também as informações em Atributos do SDK.

Este tópico fornece informações que ajudarão você a começar a usar o Message Processing Framework. Além das informações de pré-requisitos e configuração, é fornecido um tutorial que mostra como implementar um cenário comum.

Pré-requisitos e configuração

  • As credenciais fornecidas à sua aplicação devem ter as permissões apropriadas para o serviço de mensagens e as operações que ele usa. Para acessar mais informações, consulte os tópicos de segurança para SQS, SNS e EventBridge em seus respectivos guias do desenvolvedor. Veja também a parte do arquivo README no GitHub que aborda permissões específicas.

  • Para usar o AWS Message Processing Framework para.NET, você deve adicionar o pacote NuGet AWS.Messaging ao seu projeto. Por exemplo:

    dotnet add package AWS.Messaging
  • O framework se integra ao contêiner de serviço de injeção de dependência (DI) do .NET. É possível configurar o framework durante a inicialização da sua aplicação chamando AddAWSMessageBus para adicioná-lo ao contêiner de DI.

    var builder = WebApplication.CreateBuilder(args); // Register the AWS Message Processing Framework for .NET builder.Services.AddAWSMessageBus(builder => { // Register that you'll publish messages of type ChatMessage to an existing queue builder.AddSQSPublisher<ChatMessage>("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); });

Tutorial

Este tutorial demonstra como usar o AWS Message Processing Framework para .NET. Ele cria duas aplicações: uma API ASP.NET Core Minimal que envia mensagens a uma fila do Amazon SQS quando recebe uma solicitação em um endpoint da API e uma aplicação de console de execução prolongada que pesquisa essas mensagens e as processa.

  • As instruções neste tutorial prestigiam a CLI do .NET, mas você pode seguir esse tutorial usando ferramentas multiplataforma, como a CLI do .NET ou o Microsoft Visual Studio. Para acessar informações sobre ferramentas, consulte Instale e configure seu conjunto de ferramentas.

  • Este tutorial pressupõe que você esteja usando o perfil [default] para receber as credenciais. Também pressupõe que credenciais de curto prazo estejam disponíveis com as permissões apropriadas para enviar e receber mensagens do Amazon SQS. Para acessar mais informações, consulte Configure a autenticação do SDK com AWS e os tópicos sobre segurança para o SQS.

nota

Na execução deste tutorial, é possível que haja custos para o envio de mensagens do SQS.

Etapas

Criar uma fila do SQS

Este tutorial requer uma fila do SQS para enviar e receber mensagens. É possível criar uma fila com um dos seguintes comandos para a AWS CLI ou o Ferramentas da AWS para PowerShell. Anote o URL da fila exibida para que você possa especificá-la na configuração do framework a seguir.

AWS CLI
aws sqs create-queue --queue-name DemoQueue
Ferramentas da AWS para PowerShell
New-SQSQueue -QueueName DemoQueue

Criar e executar a aplicação de publicação

Use o procedimento a seguir para criar e executar a aplicação de publicação.

  1. Abra um prompt de comando ou um terminal. Localize ou crie uma pasta do sistema operacional na qual você pode criar um projeto .NET.

  2. Nessa pasta, execute o comando a seguir para criar o projeto .NET.

    dotnet new webapi --name Publisher
  3. Navegue para a pasta do novo projeto. Adicione uma dependência no AWS Message Processing Framework para .NET.

    cd Publisher dotnet add package AWS.Messaging
    nota

    Se você estiver usando AWS IAM Identity Center para autenticação, não se esqueça de também adicionar AWSSDK.SSO e AWSSDK.SSOOIDC.

  4. Substitua o código em Program.cs pelo código a seguir.

    using AWS.Messaging; using Microsoft.AspNetCore.Mvc; using Publisher; var builder = WebApplication.CreateBuilder(args); // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle. builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // Configure the AWS Message Processing Framework for .NET. builder.Services.AddAWSMessageBus(builder => { // Check for input SQS URL. // The SQS URL should be passed as a command line argument or set in the Debug launch profile. if ((args.Length == 1) && (args[0].Contains("https://sqs."))) { // Register that you'll publish messages of type GreetingMessage: // 1. To a specified queue. // 2. Using the message identifier "greetingMessage", which will be used // by handlers to route the message to the appropriate handler. builder.AddSQSPublisher<GreetingMessage>(args[0], "greetingMessage"); } // You can map additional message types to queues or topics here as well. }); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); // Create an API Endpoint that receives GreetingMessage objects // from the caller and then sends them as an SQS message. app.MapPost("/greeting", async ([FromServices] IMessagePublisher publisher, Publisher.GreetingMessage message) => { return await PostGreeting(message, publisher); }) .WithName("SendGreeting") .WithOpenApi(); app.Run(); public partial class Program { /// <summary> /// Endpoint for posting a greeting message. /// </summary> /// <param name="greetingMessage">The greeting message.</param> /// <param name="messagePublisher">The message publisher.</param> /// <returns>Async task result.</returns> public static async Task<IResult> PostGreeting(GreetingMessage greetingMessage, IMessagePublisher messagePublisher) { if (greetingMessage.SenderName == null || greetingMessage.Greeting == null) { return Results.BadRequest(); } // Publish the message to the queue configured above. await messagePublisher.PublishAsync(greetingMessage); return Results.Ok(); } } namespace Publisher { /// <summary> /// This class represents the message contents. /// </summary> public class GreetingMessage { public string? SenderName { get; set; } public string? Greeting { get; set; } } }
  5. Execute o comando a seguir. Isso deve abrir uma janela do navegador com o Swagger UI, que permite explorar e testar sua API.

    dotnet watch run <queue URL created earlier>
  6. Abra o endpoint /greeting e escolha Testar.

  7. Especifique os valores senderName e greeting da mensagem e escolha Executar. Isso invoca sua API, que envia a mensagem do SQS.

Criar e executar a aplicação de processamento

Use o procedimento a seguir para criar e executar a aplicação de processamento.

  1. Abra um prompt de comando ou um terminal. Localize ou crie uma pasta do sistema operacional na qual você pode criar um projeto .NET.

  2. Nessa pasta, execute o comando a seguir para criar o projeto .NET.

    dotnet new console --name Handler
  3. Navegue para a pasta do novo projeto. Adicione uma dependência no AWS Message Processing Framework para .NET. Adicione também o pacote Microsoft.Extensions.Hosting, que permite configurar o framework por meio do host genérico do .NET.

    cd Handler dotnet add package AWS.Messaging dotnet add package Microsoft.Extensions.Hosting
    nota

    Se você estiver usando AWS IAM Identity Center para autenticação, não se esqueça de também adicionar AWSSDK.SSO e AWSSDK.SSOOIDC.

  4. Substitua o código em Program.cs pelo código a seguir.

    using AWS.Messaging; using Handler; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; var builder = Host.CreateDefaultBuilder(args); builder.ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET. services.AddAWSMessageBus(builder => { // Check for input SQS URL. // The SQS URL should be passed as a command line argument or set in the Debug launch profile. if ((args.Length == 1) && (args[0].Contains("https://sqs."))) { // Register you'll poll the following queue. builder.AddSQSPoller(args[0]); // And that messages of type "greetingMessage" should be: // 1. Deserialized as GreetingMessage objects. // 2. Which are then passed to GreetingMessageHandler. builder.AddMessageHandler<GreetingMessageHandler, GreetingMessage>("greetingMessage"); } // You can add additional message handlers here, using different message types. }); }); var host = builder.Build(); await host.RunAsync(); namespace Handler { /// <summary> /// This class represents the message contents. /// </summary> public class GreetingMessage { public string? SenderName { get; set; } public string? Greeting { get; set; } } /// <summary> /// This handler is invoked each time you receive the message. /// </summary> public class GreetingMessageHandler : IMessageHandler<GreetingMessage> { public Task<MessageProcessStatus> HandleAsync( MessageEnvelope<GreetingMessage> messageEnvelope, CancellationToken token = default) { Console.WriteLine( $"Received message {messageEnvelope.Message.Greeting} from {messageEnvelope.Message.SenderName}"); return Task.FromResult(MessageProcessStatus.Success()); } } }
  5. Execute o comando a seguir. Isso inicia uma sondagem de execução prolongada.

    dotnet run <queue URL created earlier>

    Logo após a inicialização, a aplicação receberá a mensagem que foi enviada na primeira parte deste tutorial e registrará em log a seguinte mensagem:

    Received message {greeting} from {senderName}
  6. Pressione Ctrl+C para interromper o agente de sondagem.

Limpeza

Use um dos comandos a seguir para a AWS CLI ou o Ferramentas da AWS para PowerShell para excluir a fila.

AWS CLI
aws sqs delete-queue --queue-url "<queue URL created earlier>"
Ferramentas da AWS para PowerShell
Remove-SQSQueue -QueueUrl "<queue URL created earlier>"