Consume mensajes con el marco de procesamiento de AWS mensajes para.NET - AWS SDK for .NET

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Consume mensajes con el marco de procesamiento de AWS mensajes para.NET

Esta es una documentación preliminar para una característica en versión de vista previa. Está sujeta a cambios.

El marco de procesamiento de AWS mensajes para .NET permite consumir los mensajes que se han publicado mediante el marco o uno de los servicios de mensajería. Los mensajes se pueden consumir de diversas formas, algunas de las cuales se describen a continuación.

Controladores de mensajes

Para consumir mensajes, implemente un controlador de mensajes mediante la IMessageHandler interfaz de cada tipo de mensaje que desee procesar. El mapeo entre los tipos de mensajes y los controladores de mensajes se configura al inicio del proyecto.

await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register an SQS Queue that the framework will poll for messages. // NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd"); // Register all IMessageHandler implementations with the message type they should process. // Here messages that match our ChatMessage .NET type will be handled by our ChatMessageHandler builder.AddMessageHandler<ChatMessageHandler, ChatMessage>(); }); }) .Build() .RunAsync();

El siguiente código muestra un ejemplo de controlador de mensajes para un ChatMessage mensaje.

public class ChatMessageHandler : IMessageHandler<ChatMessage> { public Task<MessageProcessStatus> HandleAsync(MessageEnvelope<ChatMessage> messageEnvelope, CancellationToken token = default) { // Add business and validation logic here. if (messageEnvelope == null) { return Task.FromResult(MessageProcessStatus.Failed()); } if (messageEnvelope.Message == null) { return Task.FromResult(MessageProcessStatus.Failed()); } ChatMessage message = messageEnvelope.Message; Console.WriteLine($"Message Description: {message.MessageDescription}"); // Return success so the framework will delete the message from the queue. return Task.FromResult(MessageProcessStatus.Success()); } }

El exterior MessageEnvelope contiene los metadatos utilizados por el marco. Su message propiedad es el tipo de mensaje (en este casoChatMessage).

Puede volver MessageProcessStatus.Success() a indicar que el mensaje se ha procesado correctamente y el marco eliminará el mensaje de la cola de Amazon SQS. Cuando regreseMessageProcessStatus.Failed(), el mensaje permanecerá en la cola, donde podrá volver a procesarse o pasarse a una cola con letra muerta, si está configurada.

Manejo de mensajes en un proceso prolongado

Puede llamar AddSQSPoller con una URL de cola de SQS para iniciar una sesión prolongada BackgroundServiceque sondee continuamente la cola y procese los mensajes.

await Host.CreateDefaultBuilder(args) .ConfigureServices(services => { // Register the AWS Message Processing Framework for .NET services.AddAWSMessageBus(builder => { // Register an SQS Queue that the framework will poll for messages. // NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", options => { // The maximum number of messages from this queue that the framework will process concurrently on this client. options.MaxNumberOfConcurrentMessages = 10; // The duration each call to SQS will wait for new messages. options.WaitTimeSeconds = 20; }); // Register all IMessageHandler implementations with the message type they should process. builder.AddMessageHandler<ChatMessageHandler, ChatMessage>(); }); }) .Build() .RunAsync();

Configuración del sondeador de mensajes de SQS

El sondeador de mensajes SQS se puede configurar al llamar. SQSMessagePollerOptions AddSQSPoller

  • MaxNumberOfConcurrentMessages- El número máximo de mensajes de la cola que se pueden procesar simultáneamente. El valor predeterminado es 10.

  • WaitTimeSeconds- El tiempo (en segundos) durante el que la llamada ReceiveMessage SQS espera a que un mensaje llegue a la cola antes de volver a recibirlo. Si hay un mensaje disponible, la llamada se devuelve antes de eso. WaitTimeSeconds El valor predeterminado es 20.

Control del tiempo de espera de visibilidad de los mensajes

Los mensajes de SQS tienen un período de tiempo de espera de visibilidad. Cuando un consumidor comienza a gestionar un mensaje determinado, permanece en la cola pero se oculta al resto de los consumidores para evitar que lo procesen más de una vez. Si el mensaje no se gestiona y se elimina antes de volver a ser visible, es posible que otro consumidor intente gestionar el mismo mensaje.

El marco realizará un seguimiento del tiempo de espera de visibilidad de los mensajes que gestiona actualmente e intentará ampliarlo. Puede configurar este comportamiento SQSMessagePollerOptions al llamarAddSQSPoller.

  • VisibilityTimeout- El tiempo en segundos que los mensajes recibidos permanecen ocultos para las solicitudes de recuperación posteriores. El valor predeterminado es 30.

  • VisibilityTimeoutExtensionThreshold- Cuando el tiempo de espera de visibilidad de un mensaje esté dentro de estos segundos desde que caduque, el marco ampliará el tiempo de espera de visibilidad (unos VisibilityTimeout segundos más). El valor predeterminado es 5.

  • VisibilityTimeoutExtensionHeartbeatInterval- Con qué frecuencia, en segundos, el marco comprobará si hay mensajes que estén a VisibilityTimeoutExtensionThreshold unos segundos de caducar y, a continuación, ampliará su tiempo de espera de visibilidad. El valor predeterminado es 1.

En el siguiente ejemplo, el marco comprobará cada segundo si hay mensajes que aún se estén gestionando. En el caso de los mensajes transcurridos 5 segundos desde que vuelvan a ser visibles, el marco ampliará automáticamente el tiempo de espera de visibilidad de cada mensaje otros 30 segundos.

// NOTE: The URL given below is an example. Use the appropriate URL for your SQS Queue. builder.AddSQSPoller("https://sqs.us-west-2.amazonaws.com/012345678910/MyAppProd", options => { options.VisibilityTimeout = 30; options.VisibilityTimeoutExtensionThreshold = 5; VisibilityTimeoutExtensionHeartbeatInterval = 1; });

Manejo de mensajes en funciones AWS Lambda

Puede usar el marco de procesamiento de AWS mensajes para.NET con la integración de SQS con Lambda. Esto lo proporciona el AWS.Messaging.Lambda paquete. Consulte su archivo README para empezar.