

的版本 4 (V4) 适用于 .NET 的 Amazon SDK 已经发布！

有关重大更改和迁移应用程序的信息，请参阅[迁移主题](https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html)。

 [https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html](https://docs.amazonaws.cn/sdk-for-net/v4/developer-guide/net-dg-v4.html)

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 为.NET 自定义 Amazon 消息处理框架
<a name="msg-proc-fw-customize"></a>

.NET 的 Amazon 消息处理框架在三个不同的 “层” 中构建、发送和处理消息：

1. 在最外层，框架构建特定于服务的 Amazon-native 请求或响应。例如，在 Amazon SQS 中，它可以生成[https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)请求并处理服务定义的[https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_Message.html](https://docs.amazonaws.cn/AWSSimpleQueueService/latest/APIReference/API_Message.html)对象。

1. [在 SQS 请求和响应中，框架将`MessageBody`元素（或者`Message`对于亚马逊 SNS 或亚马逊）设置`Detail`为 JS EventBridge ON 格式。 CloudEvent](https://github.com/cloudevents/spec/blob/v1.0.2/cloudevents/formats/json-format.md)它包含框架设置的元数据，处理消息时可以在`MessageEnvelope`对象上访问这些元数据。

1. 在最内层， CloudEvent JSON 对象内的`data`属性包含作为消息发送或接收的.NET 对象的 JSON 序列化。

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

您可以自定义邮件信封的配置方式和读取方式：
+ `"id"`唯一标识消息。默认情况下，它设置为新的 GUID，但是可以通过实现自己的GUID `IMessageIdGenerator` 并将其注入到DI容器中来覆盖它。
+ `"type"`控制如何将消息路由到处理程序。默认情况下，它使用与消息对应的.NET 类型的全名。当通过`AddSQSPublisher`、或将消息类型映射到目标时`AddSNSPublisher`，您可以通过`messageTypeIdentifier`参数覆盖此设置`AddEventBridgePublisher`。
+ `"source"`表示哪个系统或服务器发送了消息。
  + 如果从中发布，这将是函数名称；如果在 Amazon ECS 上发布 Amazon Lambda，则为集群名称和任务 ARN；如果在 Amazon 上，则为实例 ID EC2，否则为后备值。`/aws/messaging`
  + 您可以通过`AddMessageSource`或`AddMessageSourceSuffix`在上覆盖此设置`MessageBusBuilder`。
+ `"time"`在 UTC DateTime 中设置为当前。这可以通过实现自己的内容并将其注入到 DI `IDateTimeHandler` 容器中来覆盖。
+ `"data"`包含作为消息发送或接收的.NET 对象的 JSON 表示形式：
  + `ConfigureSerializationOptions`on `MessageBusBuilder` 允许您配置序列化和反序列化消息时将使用的。[https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions](https://learn.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializeroptions)
  + 要注入其他属性或在框架构建消息封套后对其进行转换，您可以通过 `AddSerializationCallback` on 实现`ISerializationCallback`和注册该属性`MessageBusBuilder`。