

La AWS SDK para .NET V3 ha entrado en modo de mantenimiento.

Le recomendamos que migre a la [AWS SDK para .NET V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html). Para obtener información y detalles adicionales sobre cómo migrar, consulta nuestro [anuncio sobre el modo de mantenimiento](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/).

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Personalización del Marco de procesamiento de mensajes de AWS para .NET
<a name="msg-proc-fw-customize"></a>

El Marco de procesamiento de mensajes de AWS para .NET crea, envía y gestiona los mensajes en tres “capas” diferentes:

1. En la capa más externa, el marco crea la solicitud o respuesta nativa de AWS específica de un servicio. Con Amazon SQS, por ejemplo, crea solicitudes [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html) y trabaja con los objetos [https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html) definidos por el servicio.

1. Dentro de la solicitud y respuesta SQS, el marco establece el elemento `MessageBody` (`Message` para Amazon SNS o `Detail` para Amazon EventBridge) en un [CloudEvent con formato JSON](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md). Contiene metadatos establecidos por el marco que son accesibles en el objeto `MessageEnvelope` al gestionar un mensaje.

1. En la capa más interna, el atributo `data` del objeto JSON de CloudEvent contiene una serialización JSON del objeto .NET que se envió o recibió como mensaje.

   ```
   {
       "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>"
   }
   ```

Puede personalizar la configuración y la lectura del sobre del mensaje:
+ `"id"` identifica el mensaje de forma única. De forma predeterminada, se establece un nuevo GUID, pero esto se puede anular implementando su propio elemento `IMessageIdGenerator` e inyectándolo en el contenedor DI. 
+ `"type"` controla cómo se enruta el mensaje a los controladores. De forma predeterminada, utiliza el nombre completo del tipo .NET que corresponde al mensaje. Puede anularlo mediante el parámetro `messageTypeIdentifier` al asignar el tipo de mensaje al destino a través de `AddSQSPublisher`, `AddSNSPublisher` o `AddEventBridgePublisher`.
+ `"source"` indica qué sistema o servidor envió el mensaje.
  + Este será el nombre de la función si se publica desde AWS Lambda, el nombre del clúster y el ARN de la tarea si está en Amazon ECS o el ID de la instancia si está en Amazon EC2. De lo contrario, será un valor alternativo de `/aws/messaging`. 
  + Puede anularlo mediante `AddMessageSource` o `AddMessageSourceSuffix` en el elemento `MessageBusBuilder`.
+ `"time"` se ha definido en la fecha y hora actual en UTC. Esto se puede anular implementando su propio elemento `IDateTimeHandler` e inyectándolo en el contenedor DI.
+ `"data"` contiene una representación en JSON del objeto .NET que se envió o recibió como mensaje:
  + `ConfigureSerializationOptions` en el elemento `MessageBusBuilder` le permite configurar el objeto [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 se utilizará para serializar y deserializar el mensaje.
  + Para añadir atributos adicionales o transformar el sobre del mensaje una vez que el marco lo haya creado, puede implementar `ISerializationCallback` y registrarlo mediante `AddSerializationCallback` en `MessageBusBuilder`.