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.
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á.
Consumir mensagens com o AWS Message Processing Framework para .NET
O AWS Message Processing Framework para .NET possibilita que você consuma mensagens que foram publicadas utilizando o framework 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 usando a interface IMessageHandler para cada tipo de mensagem que você deseja processar. O mapeamento entre tipos e manipuladores é 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 para uma mensagem 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()); } }
O MessageEnvelope externo contém metadados usados pelo framework. A respectiva propriedade message é o tipo de mensagem (nesse caso, ChatMessage).
É possível exibir MessageProcessStatus.Success() para indicar que a mensagem foi processada com êxito e que o framework a excluirá da fila do Amazon SQS. Ao exibir MessageProcessStatus.Failed(), a mensagem permanecerá na fila, onde poderá ser processada novamente ou transferida para uma fila de mensagens não entregues, se configurada.
Tratar mensagens em um processo de longa duração
Você pode chamar AddSQSPoller com um URL de fila do SQS para iniciar um 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();
Configurar o SQS Message Poller
É possível configurar o SQS Message Poller pelo SQSMessagePollerOptions durante a chamada AddSQSPoller.
-
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 chamadaReceiveMessagedo SQS 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.
Processamento do tempo limite de visibilidade de mensagens
As mensagens do SQS têm um tempo limite de visibilidade. Quando um consumidor começa a processar uma mensagem específica, ela permanece na fila, mas fica oculta dos outros consumidores para que ela não seja processada mais de uma vez. Se a mensagem não for processada e excluída antes de se tornar visível novamente, outro consumidor poderá tentar processar a mesma mensagem.
O framework vai monitorar e tentar estender o tempo limite de visibilidade das mensagens que está processando no momento. É possível configurar esse comportamento em SQSMessagePollerOptions ao chamar AddSQSPoller.
-
VisibilityTimeout: a duração em segundos em que as mensagens recebidas permanecem ocultas de solicitações de recuperação subsequentes. O valor padrão é 30. -
VisibilityTimeoutExtensionThreshold: quando o tempo limite de visibilidade de uma mensagem estiver a esse intervalo de segundos de expirar, o framework estenderá o tempo limite de visibilidade (por maisVisibilityTimeoutsegundos). O valor padrão é 5. -
VisibilityTimeoutExtensionHeartbeatInterval: com que frequência, em segundos, o framework vai conferir as mensagens que estão a esseVisibilityTimeoutExtensionThresholdde expirar e, depois, estenderá o tempo limite de visibilidade. O valor padrão é 1.
No exemplo a seguir, o framework vai conferir a cada segundo as mensagens que ainda estão sendo processadas. Para essas mensagens que estão a 5 segundos de se tornarem visíveis novamente, o framework 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; });
Processar mensagens em funções do AWS Lambda
É possível usar o AWS Message Processing Framework para .NET com a integração do SQS ao Lambda. O recurso é fornecido pelo pacote AWS.Messaging.Lambda. Consulte o arquivo README