

A versão 4 (V4) do AWS SDK para .NET foi lançada\$1

Para obter informações sobre mudanças significativas e migrar seus aplicativos, consulte o [tópico de migração](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html).

 [https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html)

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
<a name="msg-proc-fw-consume"></a>

A Estrutura de Processamento de AWS Mensagens para.NET permite que você consuma mensagens que foram [publicadas](msg-proc-fw-publish.md) 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
<a name="handle-a-message"></a>

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 caso`ChatMessage`).

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 retornar`MessageProcessStatus.Failed()`, a mensagem permanecerá na fila, onde poderá ser processada novamente ou movida para uma [fila de mensagens mortas, se configurada](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-dead-letter-queues.html).

## Tratamento de mensagens em um processo de longa duração
<a name="long-running-process"></a>

Você pode chamar `AddSQSPoller` com uma URL de fila SQS para iniciar uma longa execução [https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.backgroundservice](https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.backgroundservice)que pesquisará continuamente a fila e processará 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
<a name="config-msg-poller"></a>

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 do `ReceiveMessage` SQS espera que uma mensagem chegue na fila antes de retornar. Se uma mensagem estiver disponível, a chamada retornará antes de`WaitTimeSeconds`. 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](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html). 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 ligar`AddSQSPoller`.
+ `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
<a name="lambda-functions"></a>

Você pode usar o AWS Message Processing Framework para.NET com a [integração do SQS com o Lambda](https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html). Isso é fornecido pelo `AWS.Messaging.Lambda` pacote. Consulte seu [README](https://github.com/aws/aws-dotnet-messaging/blob/main/src/AWS.Messaging.Lambda/README.md) para começar.