View a markdown version of this page

自定义 AWS Message Processing Framework for .NET - AWS SDK for .NET (V3)

AWS SDK for .NET V3 已结束支持。

我们建议您迁移到 AWS SDK for .NET V4。有关如何迁移的更多详细信息和信息,请参阅我们的终止支持公告

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

自定义 AWS Message Processing Framework for .NET

AWS Message Processing Framework for .NET 在三个不同的“层”中构建、发送和处理消息:

  1. 在最外层,框架构建特定于服务的 AWS 原生请求或响应。例如,在 Amazon SQS 中,它生成 SendMessage 请求并处理该服务定义的 Message 对象。

  2. 在 SQS 请求和响应中,框架将 MessageBody 元素(对于 Amazon SNS,为 Message,对于 Amazon EventBridge,为 Detail)设置为 JSON 格式的 CloudEvent。它包含框架设置的元数据,在处理消息时可在 MessageEnvelope 对象上访问。

  3. 在最内层,CloudEvent JSON 对象内的 data 属性包含一个 JSON 序列化表示的 .NET 对象,该对象作为消息发送或接收。

    { "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 类型的完整名称。当通过 AddSQSPublisherAddSNSPublisherAddEventBridgePublisher 将消息类型映射到目的地时,您可以通过 messageTypeIdentifier 参数覆盖此设置。

  • "source" 表示发送消息的系统或服务器。

    • 如果从 AWS Lambda 发布,则该值是函数名称;如果在 Amazon ECS 上,则该值为集群名称和任务 ARN;如果在 Amazon EC2 上,则该值为实例 ID,否则为 /aws/messaging 的回退值。

    • 您可以在 MessageBusBuilder 上通过 AddMessageSourceAddMessageSourceSuffix 覆盖此设置。

  • "time" 设置为当前的日期时间(UTC)。您可以通过实施自己的 IDateTimeHandler 并将其注入 DI 容器来覆盖此设置。

  • "data" 包含作为消息发送或接收的 .NET 对象的 JSON 表示:

    • MessageBusBuilder 上的 ConfigureSerializationOptions 让您能够配置序列化和反序列化消息时将使用的 System.Text.Json.JsonSerializerOptions

    • 要注入其他属性或在框架构建消息信封后对其进行转换,您可以实施 ISerializationCallback 并通过 MessageBusBuilder 上的 AddSerializationCallback 注册它。