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

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

为.NET 自定义 Amazon 消息处理框架

这是适用于预览版中功能的预发布文档。本文档随时可能更改。

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

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

  2. 在 SQS 请求和响应中,框架将MessageBody元素(或者Message对于亚马逊 SNS 或亚马逊)设置Detail为 JS EventBridge ON 格式。 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 类型的全名。当通过AddSQSPublisher、或将消息类型映射到目标时AddSNSPublisher,您可以通过messageTypeIdentifier参数覆盖此设置AddEventBridgePublisher

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

    • 如果从中发布,这将是函数名称;如果在 Amazon ECS 上发布 Amazon Lambda,则为集群名称和任务 ARN;如果在 Amazon EC2 上,则为实例 ID,否则为后备值。/aws/messaging

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

  • "time"在 UTC DateTime 中设置为当前。这可以通过实现自己的内容并将其注入到 DI IDateTimeHandler 容器中来覆盖。

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

    • ConfigureSerializationOptionson MessageBusBuilder 允许您配置序列化和反序列化消息时将使用的。System.Text.Json.JsonSerializerOptions

    • 要注入其他属性或在框架构建消息封套后对其进行转换,您可以通过 AddSerializationCallback on 实现ISerializationCallback和注册该属性MessageBusBuilder