

O AWS SDK para .NET V3 entrou no modo de manutenção.

Recomendamos que você migre para a [AWS SDK para .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Para obter detalhes e informações adicionais sobre como migrar, consulte nosso [anúncio do modo de manutenção](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

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á.

# Personalizar o AWS Message Processing Framework para .NET
<a name="msg-proc-fw-customize"></a>

O AWS Message Processing Framework para .NET cria, envia e processa mensagens em três “camadas” diferentes:

1. Na camada mais externa, o framework cria a solicitação ou resposta nativa da AWS específica de um serviço. Com o Amazon SQS, por exemplo, ele cria solicitações [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) e trabalha com os objetos [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html) definidos pelo serviço.

1. Dentro da solicitação e resposta do SQS, o framework define o elemento `MessageBody` (ou `Message` para o Amazon SNS ou `Detail` para o Amazon EventBridge) como um [CloudEvent formatado em JSON](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md). Ele contém metadados definidos pelo framework que podem ser acessados no objeto `MessageEnvelope` ao processar uma mensagem.

1. Na camada mais interna, o atributo `data` dentro do objeto JSON do CloudEvent contém uma serialização JSON do objeto .NET que foi enviado ou recebido como mensagem.

   ```
   {
       "id":"b02f156b-0f02-48cf-ae54-4fbbe05cffba",
       "source":"/aws/messaging",
       "specversion":"1.0",
       "type":"Publisher.Models.ChatMessage",
       "time":"2023-11-21T16:36:02.8957126+00:00",
       "data":"<the ChatMessage object serialized as JSON>"
   }
   ```

É possível personalizar a forma como o envelope da mensagem é configurado e lido:
+ `"id"` identifica a mensagem de forma exclusiva. Por padrão, ele é definido como um novo GUID, mas isso pode ser substituído implementando o seu próprio `IMessageIdGenerator` e injetando-o no contêiner de DI. 
+ `"type"` controla como a mensagem é direcionada para os manipuladores. Por padrão, ele usa o nome completo do tipo .NET que corresponde à mensagem. Você pode substituí-lo por meio do parâmetro `messageTypeIdentifier` ao associar o tipo de mensagem ao destino via `AddSQSPublisher`, `AddSNSPublisher` ou `AddEventBridgePublisher`.
+ `"source"` indica qual sistema ou servidor enviou a mensagem.
  + Esse será o nome da função se estiver publicando do AWS Lambda, o nome do cluster e o ARN da tarefa se estiver no Amazon ECS e o ID da instância se estiver no Amazon EC2, caso contrário, um valor alternativo de `/aws/messaging`. 
  + Você pode substituí-lo por meio de `AddMessageSource` ou `AddMessageSourceSuffix` no `MessageBusBuilder`.
+ `"time"` definido como o DateTime atual em UTC. Isso pode ser substituído implementando o seu próprio `IDateTimeHandler` e injetando-o no contêiner de DI.
+ `"data"` contém uma representação JSON do objeto .NET que foi enviado ou recebido como mensagem:
  + `ConfigureSerializationOptions` no `MessageBusBuilder` permite que você configure o [https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions) que será usado ao serializar e desserializar a mensagem.
  + Para injetar atributos adicionais ou transformar o envelope da mensagem depois que a estrutura o cria, você pode implementar `ISerializationCallback` e registrar isso por meio de `AddSerializationCallback` no `MessageBusBuilder`.