AWS Message Processing Framework for .NET をカスタマイズします - AWS SDK for .NET (V3)

のバージョン 4 (V4) AWS SDK for .NET がリリースされました。

SDK の新しいバージョンの使用を開始するには、「AWS SDK for .NET (V4) デベロッパーガイド」、特に「バージョン 4 への移行」に関するトピックを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Message Processing Framework for .NET をカスタマイズします

AWS Message Processing Framework for .NET は、3 つの異なる「レイヤー」でメッセージを構築、送信、処理します。

  1. 最外部レイヤーで、フレームワークはサービスに固有の AWS ネイティブリクエストまたはレスポンスを構築します。例えば、Amazon SQS では、SendMessage リクエストを構築し、サービスによって定義された Message オブジェクトと連携します。

  2. SQS リクエストおよびレスポンス内で、フレームワークは MessageBody 要素 (Amazon SNS の場合は Message、Amazon EventBridge の場合は Detail) を JSON 形式の 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 に設定されますが、独自の IMessageIdGenerator を実装して DI コンテナに挿入することで上書きできます。

  • "type" は、メッセージをハンドラーにルーティングする方法を制御します。デフォルトでは、メッセージに対応する .NET タイプのフルネームが使用されます。AddSQSPublisherAddSNSPublisher、または AddEventBridgePublisher を介してメッセージタイプを送信先にマッピングするときに、messageTypeIdentifier パラメータを使用してこれを上書きできます。

  • "source" は、メッセージを送信したシステムまたはサーバーを示します。

    • これは、AWS Lambda から発行する場合は関数名であり、Amazon ECS の場合はクラスター名とタスク ARN であり、Amazon EC2 の場合はインスタンス ID であり、それ以外の場合は /aws/messaging のフォールバック値です。

    • これは、MessageBusBuilder での AddMessageSource または AddMessageSourceSuffix で上書きできます。

  • UTC での現在の DateTime に設定された "time"。これは、独自の IDateTimeHandler を実装し、DI コンテナに挿入することで上書きできます。

  • "data" には、メッセージとして送受信された .NET オブジェクトの JSON 表現が含まれます。

    • MessageBusBuilder に対する ConfigureSerializationOptions により、メッセージをシリアル化および逆シリアル化するときに使用される System.Text.Json.JsonSerializerOptions を設定できます。

    • フレームワークが構築したら、追加の属性を挿入したり、メッセージエンベロープを変換したりするには、ISerializationCallback を実装して、それを MessageBusBuilder に対する AddSerializationCallback を介して登録できます。