

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

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

# Personalize a estrutura de processamento de AWS mensagens para.NET
<a name="msg-proc-fw-customize"></a>

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

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

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

1. Na camada mais interna, o `data` atributo dentro do objeto CloudEvent JSON 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>"
   }
   ```

Você pode 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 é roteada para os manipuladores. Por padrão, isso usa o nome completo do tipo.NET que corresponde à mensagem. Você pode substituir isso por meio do `messageTypeIdentifier` parâmetro ao mapear o tipo de mensagem para o 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 AWS Lambda, o nome do cluster e o ARN da tarefa se estiver no Amazon ECS, o ID da instância se estiver na Amazon, caso contrário EC2, um valor alternativo de. `/aws/messaging` 
  + Você pode substituir isso por meio de `AddMessageSource` ou `AddMessageSourceSuffix` no`MessageBusBuilder`.
+ `"time"`definido para o atual DateTime em UTC. Isso pode ser substituído implementando o seu próprio `IDateTimeHandler` e injetando-o no contêiner DI.
+ `"data"`contém uma representação JSON do objeto.NET que foi enviado ou recebido como mensagem:
  + `ConfigureSerializationOptions`on `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 on. `AddSerializationCallback` `MessageBusBuilder`