自訂 .NET 的 AWS 訊息處理架構 - AWS SDK for .NET

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

自訂 .NET 的 AWS 訊息處理架構

這是預覽版中某項功能的搶鮮版說明文件。內容可能變動。

.NET 的 AWS 消息處理框架在三個不同的「層」中構建,發送和處理消息:

  1. 在最外層,框架構構建特定於服務的 AWS-native 請求或響應。例如,使用 Amazon SQS,它可以建立SendMessage請求,並使用服務定義的Message物件。

  2. 在 SQS 請求和響應中,框架將MessageBody元素(或 Message Amazon SNS 或 Amazon EventBridge)設置DetailJSON CloudEvent 格式。這包含由框架設置的元數據,該元數據在處理消息時可在MessageEnvelope對象上訪問。

  3. 在最內層, 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 類型的完整名稱。透過AddSQSPublisherAddSNSPublisher或將訊息類型對應至目的地時,您可以透過messageTypeIdentifier參數覆寫此參數AddEventBridgePublisher

  • "source"指出傳送訊息的系統或伺服器。

    • 這將是函數名稱 (如果從中發佈) AWS Lambda,叢集名稱和任務 ARN (如果在 Amazon ECS 上),執行個體 ID (如果是在 Amazon EC2 上),否則後援值為。/aws/messaging

    • 您可以透過AddMessageSourceAddMessageSourceSuffix在上覆寫此選項MessageBusBuilder

  • "time" DateTime 在 UTC 中設定為目前的。這可以通過實現自己的IDateTimeHandler並將其注入 DI 容器來覆蓋。

  • "data"包含作為消息發送或接收的 .NET 對象的 JSON 表示:

    • ConfigureSerializationOptionson MessageBusBuilder 可讓您設定序列化和還原序列化訊息時要使用的項System.Text.Json.JsonSerializerOptions目。

    • 要在框架構建後注入其他屬性或轉換消息信封,可以通過 AddSerializationCallback on 實現ISerializationCallback和註冊它MessageBusBuilder