

 適用於 .NET 的 AWS SDK V3 已進入維護模式。

我們建議您遷移至 [適用於 .NET 的 AWS SDK V4](https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/welcome.html)。如需如何遷移的其他詳細資訊和資訊，請參閱我們的[維護模式公告](https://aws.amazon.com/blogs/developer/aws-sdk-for-net-v3-maintenance-mode-announcement/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 自訂適用於 .NET AWS 的訊息處理架構
<a name="msg-proc-fw-customize"></a>

.NET AWS 的訊息處理架構會在三個不同的「層」中建置、傳送和處理訊息：

1. 在最外層，架構會建置服務特有的 AWS原生請求或回應。例如，使用 Amazon SQS 可建置[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_SendMessage.html)請求，並使用 服務定義的[https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/APIReference/API_Message.html)物件。

1. 在 SQS 請求和回應中，架構會將 `MessageBody`元素 （或 `Message` Amazon SNS 或 `Detail` Amazon EventBridge) 設定為 [JSON 格式的 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，但可以透過實作您自己的 `IMessageIdGenerator` 並將其插入 DI 容器來覆寫。
+ `"type"` 控制訊息路由到處理常式的方式。根據預設，這會使用與訊息對應的 .NET 類型完整名稱。透過 `AddSNSPublisher`、 或 將訊息類型映射至目的地時`AddSQSPublisher`，您可以透過 `messageTypeIdentifier` 參數覆寫此項目`AddEventBridgePublisher`。
+ `"source"` 指出哪個系統或伺服器傳送訊息。
  + 如果從 發佈，這會是函數名稱 AWS Lambda，如果在 Amazon ECS 上是叢集名稱和任務 ARN，如果在 Amazon EC2 上是執行個體 ID，則將是備用值 `/aws/messaging`。
  + 您可以透過 `AddMessageSource`或在 `AddMessageSourceSuffix`上覆寫此項目`MessageBusBuilder`。
+ `"time"` 設定為目前的 UTC DateTime。這可以透過實作您自己的 `IDateTimeHandler`並將其注入 DI 容器來覆寫。
+ `"data"` 包含作為訊息傳送或接收的 .NET 物件的 JSON 表示法：
  + `ConfigureSerializationOptions` 上的 `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`上透過 實作`ISerializationCallback`並註冊該屬性`MessageBusBuilder`。