Se ha publicado la versión 4 de AWS SDK para .NET.
Para empezar a usar la nueva versión del SDK, consulte la Guía para desarrolladores de AWS SDK para .NET (versión 4), especialmente el tema Migración a la versión 4.
Introducción al Marco de procesamiento de mensajes de AWS para .NET
Antes de comenzar, asegúrese de que ha configurado el entorno y el proyecto. Revise también la información en Características de SDK.
En este tema se proporciona información que le ayudará a empezar a utilizar el Marco de procesamiento de mensajes. Además de la información sobre los requisitos previos y la configuración, se proporciona un tutorial que muestra cómo implementar un escenario común.
Requisitos previos y configuración
-
Las credenciales que proporcione para su aplicación deben tener los permisos adecuados para el servicio de mensajería y las operaciones que este utilice. Para obtener más información, consulte los temas de seguridad de SQS, SNS y EventBridge en sus respectivas guías para desarrolladores. Consulte también la parte del archivo README
en GitHub donde se explican los permisos específicos. -
Para usar el Marco de procesamiento de mensajes de AWS para.NET, debe añadir el paquete
AWS.Messagingde NuGet a su proyecto. Por ejemplo: dotnet add package AWS.Messaging -
El marco se integra con el contenedor de servicios de inyección de dependencias (DI)
de .NET. Puede configurar el marco durante el inicio de la aplicación llamando a AddAWSMessageBuspara añadirlo al contenedor 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 muestra cómo utilizar el Marco de procesamiento de mensajes de AWS para .NET. Crea dos aplicaciones: una API mínima ASP.NET Core que envía mensajes a una cola de Amazon SQS cuando recibe una solicitud en un punto de conexión de la API, y una aplicación de consola de larga duración que sondea estos mensajes y los gestiona.
-
Las instrucciones de este tutorial se centran en la CLI de .NET, pero puede aplicarlas tanto con herramientas multiplataforma como con la CLI de .NET o Microsoft Visual Studio. Para obtener más información sobre estas herramientas, consulte Instalación y configuración de la cadena de herramientas.
-
En este tutorial se da por supuesto que utiliza su perfil
[default]para las credenciales. Asimismo, se presupone que dispone de credenciales a corto plazo con los permisos adecuados para enviar y recibir mensajes de Amazon SQS. Para obtener más información, consulte Configuración de la autenticación de SDK con AWS y los temas de seguridad de SQS.
nota
Al ejecutar este tutorial, puede incurrir en costes de mensajería de SQS.
Pasos
Creación de una cola de SQS
Este tutorial requiere una cola de SQS para enviar y recibir mensajes. Se puede crear una cola utilizando uno de los siguientes comandos para la AWS CLI o las Herramientas de AWS para PowerShell. Anote la URL de la cola que se devuelve para poder especificarla en la configuración del marco que se indica a continuación.
Creación y ejecución de la aplicación de publicación
Utilice el siguiente procedimiento para crear y ejecutar la aplicación de publicación.
-
Abra un símbolo del sistema o un terminal. Busque o cree una carpeta del sistema operativo en la que pueda crear un proyecto .NET.
-
En esa carpeta, ejecute el siguiente comando para crear el proyecto .NET.
dotnet new webapi --name Publisher -
Acceda a la carpeta del proyecto nuevo. Añada una dependencia en el Marco de procesamiento de mensajes de AWS para .NET.
cd Publisher dotnet add package AWS.Messagingnota
Si utiliza AWS IAM Identity Center para la autenticación, no olvide añadir también
AWSSDK.SSOyAWSSDK.SSOOIDC. -
Reemplace el código de
Program.cscon lo siguiente: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; } } } -
Ejecute el siguiente comando. Se abrirá una ventana del navegador con la interfaz de usuario de Swagger, que le permitirá explorar y probar su API.
dotnet watch run<queue URL created earlier> -
Abra el punto de conexión de
/greetingy seleccione Pruébelo. -
Especifique los valores
senderNameygreetingpara el mensaje y seleccione Ejecutar. Esto invocará a su API, que enviará el mensaje de SQS.
Creación y ejecución de la aplicación de procesamiento
Utilice el siguiente procedimiento para crear y ejecutar la aplicación de procesamiento.
-
Abra un símbolo del sistema o un terminal. Busque o cree una carpeta del sistema operativo en la que pueda crear un proyecto .NET.
-
En esa carpeta, ejecute el siguiente comando para crear el proyecto .NET.
dotnet new console --name Handler -
Acceda a la carpeta del proyecto nuevo. Añada una dependencia en el Marco de procesamiento de mensajes de AWS para .NET. Añada también el paquete
Microsoft.Extensions.Hosting, que le permite configurar el marco a través del host genérico de .NET. cd Handler dotnet add package AWS.Messaging dotnet add package Microsoft.Extensions.Hostingnota
Si utiliza AWS IAM Identity Center para la autenticación, no olvide añadir también
AWSSDK.SSOyAWSSDK.SSOOIDC. -
Reemplace el código de
Program.cscon lo siguiente: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()); } } } -
Ejecute el siguiente comando. Esto inicia un sondeador de larga duración.
dotnet run<queue URL created earlier>Poco después de iniciarse, la aplicación recibirá el mensaje que se envió en la primera parte de este tutorial y registrará el siguiente mensaje:
Received message {greeting} from {senderName} -
Pulse
Ctrl+Cpara detener el sondeador.
Eliminación
Utilice uno de los siguientes comandos para la AWS CLI o las Herramientas de AWS para PowerShell para eliminar la cola.