A versão 4 (V4) do SDK para .NET está em pré-visualização! Para ver informações sobre essa nova versão na versão prévia, consulte o Guia do desenvolvedor AWS SDK para .NET (versão 4).
Observe que a V4 do SDK está em versão prévia, portanto, seu conteúdo está sujeito a alterações.
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 o AWS Message Processing Framework para.NET
nota
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.NET permite 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 que a estrutura excluirá a mensagem da fila do Amazon SQS. 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 chamar AddSQSPoller
com uma URL de fila SQS para iniciar uma longa execução 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();
Configurando o SQS Message Poller
O poller de mensagens do SQS pode ser configurado 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 chamada doReceiveMessage
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.
Tratamento do tempo limite de visibilidade da mensagem
As mensagens do SQS 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 maisVisibilityTimeout
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, emVisibilityTimeoutExtensionThreshold
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.NET com a integração do SQS com o Lambda. Isso é fornecido pelo AWS.Messaging.Lambda
pacote. Consulte seu README