自定义 Amazon Message Processing Framework for .NET - 适用于 .NET 的 Amazon SDK(V3)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

要开始使用新版本的 SDK,请参阅 适用于 .NET 的 Amazon SDK(V4)开发人员指南,尤其是关于迁移到版本 4 的主题。

自定义 Amazon Message Processing Framework for .NET

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

  1. 在最外层,框架构建特定于服务的 Amazon 原生请求或响应。例如,在 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" 表示发送消息的系统或服务器。

    • 如果从 Amazon 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 注册它。