Consuma mensagens com a Estrutura de Processamento de AWS Mensagens para. NET - AWS SDK for .NET

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Consuma mensagens com a Estrutura de Processamento de AWS Mensagens para. NET

Esta é uma documentação de pré-lançamento de um recurso em versão de pré-visualização. Está sujeita a alteração.

A estrutura de processamento de AWS mensagens para. NETpermite que você consuma mensagens que foram publicadas usando a estrutura ou um dos serviços de mensagens. As mensagens podem ser consumidas de várias maneiras, algumas das quais estão descritas abaixo.

Manipuladores de mensagens

Para consumir mensagens, implemente um manipulador de mensagens usando a IMessageHandler interface para cada tipo de mensagem que você deseja processar. O mapeamento entre tipos de mensagens e manipuladores de mensagens é configurado na inicialização do projeto.

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();

O código a seguir mostra um exemplo de manipulador de mensagens para uma ChatMessage mensagem.

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()); } }

O externo MessageEnvelope contém metadados usados pela estrutura. Sua message propriedade é o tipo de mensagem (nesse casoChatMessage).

Você pode retornar MessageProcessStatus.Success() para indicar que a mensagem foi processada com sucesso e a estrutura excluirá a mensagem da SQS fila da Amazon. Ao retornarMessageProcessStatus.Failed(), a mensagem permanecerá na fila, onde poderá ser processada novamente ou movida para uma fila de mensagens mortas, se configurada.

Tratamento de mensagens em um processo de longa duração

Você pode ligar AddSQSPoller com uma SQS fila URL para iniciar uma longa execução BackgroundServiceque pesquisará continuamente a fila e processará as mensagens.

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();

Configurando o SQS Message Poller

O poller de SQS mensagens pode ser configurado pelo SQSMessagePollerOptions ao ligarAddSQSPoller.

  • MaxNumberOfConcurrentMessages- O número máximo de mensagens da fila a serem processadas simultaneamente. O valor padrão é 10.

  • WaitTimeSeconds- A duração (em segundos) pela qual a ReceiveMessage SQS chamada espera que uma mensagem chegue na fila antes de retornar. Se uma mensagem estiver disponível, a chamada retornará antes deWaitTimeSeconds. O valor padrão é 20.

Tratamento do tempo limite de visibilidade da mensagem

SQSas mensagens têm um período de tempo limite de visibilidade. Quando um consumidor começa a lidar com uma determinada mensagem, ela permanece na fila, mas fica oculta dos outros consumidores para evitar processá-la mais de uma vez. Se a mensagem não for tratada e excluída antes de se tornar visível novamente, outro consumidor poderá tentar lidar com a mesma mensagem.

A estrutura rastreará e tentará estender o tempo limite de visibilidade das mensagens que está manipulando atualmente. Você pode configurar esse comportamento no SQSMessagePollerOptions ao ligarAddSQSPoller.

  • VisibilityTimeout- A duração em segundos em que as mensagens recebidas são ocultadas das solicitações de recuperação subsequentes. O valor padrão é 30.

  • VisibilityTimeoutExtensionThreshold- Quando o tempo limite de visibilidade de uma mensagem estiver dentro de alguns segundos após a expiração, a estrutura estenderá o tempo limite de visibilidade (em mais VisibilityTimeout alguns segundos). O valor padrão é 5.

  • VisibilityTimeoutExtensionHeartbeatInterval- Com que frequência, em segundos, a estrutura verificará as mensagens que estão prestes a expirar e, em VisibilityTimeoutExtensionThreshold seguida, estenderá o tempo limite de visibilidade. O valor padrão é 1.

No exemplo a seguir, a estrutura verificará a cada 1 segundo as mensagens que ainda estão sendo tratadas. Para essas mensagens dentro de 5 segundos após se tornarem visíveis novamente, a estrutura estenderá automaticamente o tempo limite de visibilidade de cada mensagem em mais 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; });

Manipulação de mensagens em AWS Lambda funções

Você pode usar o AWS Message Processing Framework para. NETcom a SQSintegração com o Lambda. Isso é fornecido pelo AWS.Messaging.Lambda pacote. Consulte seu READMEpara começar.