¡Se AWS SDK para .NET ha publicado la versión 4 (V4) del!
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.
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.
Consumo de mensajes con el Marco de procesamiento de mensajes de AWS para .NET
El Marco de procesamiento de mensajes de AWS 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. A continuación se describen algunas de ellas.
Controladores de mensajes
Para consumir mensajes, implemente un controlador de mensajes mediante la interfaz de IMessageHandler para cada tipo de mensaje que quiera procesar. La asignación entre los tipos de mensajes y los controladores de mensajes se configura al iniciar el 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 mensaje de ChatMessage.
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 elemento MessageEnvelope exterior contiene metadatos usados por el marco. Su propiedad message es el tipo de mensaje (en este caso, ChatMessage).
Puede devolver MessageProcessStatus.Success() para indicar que el mensaje se ha procesado correctamente y el marco eliminará el mensaje de la cola de Amazon SQS. Si devuelve MessageProcessStatus.Failed(), el mensaje permanecerá en la cola, donde podrá volver a procesarse o moverse a una cola de mensajes fallidos (si está configurada).
Gestión de mensajes en un proceso de larga duración
Puede llamar a AddSQSPoller con una URL de cola de SQS para iniciar un proceso BackgroundService
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 de SQS Message Poller
SQS Message Poller se puede configurar mediante SQSMessagePollerOptions al llamar a AddSQSPoller.
-
MaxNumberOfConcurrentMessages: el número máximo de mensajes de la cola que se pueden procesar simultáneamente. El valor predeterminado es 10. -
WaitTimeSeconds: la duración (en segundos) durante la cual la llamadaReceiveMessagede SQS espera a que llegue un mensaje a la cola antes de devolver una respuesta. Si hay un mensaje disponible, la llamada devuelve una respuesta antes de que transcurra el tiempo especificado enWaitTimeSeconds. El valor predeterminado es 20.
Gestión del tiempo de espera de visibilidad de los mensajes
Los mensajes de SQS tienen un tiempo de espera de visibilidad. Cuando un consumidor comienza a gestionar un mensaje determinado, este permanece en la cola, pero se oculta a los demás consumidores para evitar que se procese 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 en SQSMessagePollerOptions al llamar a AddSQSPoller.
-
VisibilityTimeout: la duración en segundos durante la cual los mensajes recibidos permanecen ocultos a las solicitudes de recuperación posteriores. El valor predeterminado es 30. -
VisibilityTimeoutExtensionThreshold: cuando el tiempo de espera de la visibilidad de un mensaje esté a punto de vencer, el marco ampliará dicho tiempo de espera (añadiendo de nuevo los segundos especificados enVisibilityTimeout). El valor predeterminado es 5. -
VisibilityTimeoutExtensionHeartbeatInterval: la frecuencia en segundos con la que el marco comprueba los mensajes que están a punto de caducar dentro del umbralVisibilityTimeoutExtensionThresholdy, a continuación, amplía 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 procesando. Para aquellos mensajes que estén a menos de 5 segundos de volver a ser visibles, el marco ampliará automáticamente el tiempo de espera de visibilidad de cada mensaje en 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; });
Gestión de mensajes en funciones de AWS Lambda
Puede usar el Marco de procesamiento de mensajes de AWS para .NET con la integración de SQS con Lambda. Esto lo proporciona el paquete AWS.Messaging.Lambda. Consulte su archivo README