适用于 .NET 的 Amazon SDK 版本 4(V4)已经发布!
要开始使用新版本的 SDK,请参阅 适用于 .NET 的 Amazon SDK(V4)开发人员指南,尤其是关于迁移到版本 4 的主题。
自定义 Amazon Message Processing Framework for .NET
Amazon Message Processing Framework for .NET 在三个不同的“层”中构建、发送和处理消息:
-
在最外层,框架构建特定于服务的 Amazon 原生请求或响应。例如,在 Amazon SQS 中,它生成
SendMessage请求并处理该服务定义的Message对象。 -
在 SQS 请求和响应中,框架将
MessageBody元素(对于 Amazon SNS,为Message,对于 Amazon EventBridge,为Detail)设置为 JSON 格式的 CloudEvent。它包含框架设置的元数据,在处理消息时可在 MessageEnvelope对象上访问。 -
在最内层,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 类型的完整名称。当通过AddSQSPublisher、AddSNSPublisher或AddEventBridgePublisher将消息类型映射到目的地时,您可以通过messageTypeIdentifier参数覆盖此设置。 -
"source"表示发送消息的系统或服务器。-
如果从 Amazon Lambda 发布,则该值是函数名称;如果在 Amazon ECS 上,则该值为集群名称和任务 ARN;如果在 Amazon EC2 上,则该值为实例 ID,否则为
/aws/messaging的回退值。 -
您可以在
MessageBusBuilder上通过AddMessageSource或AddMessageSourceSuffix覆盖此设置。
-
-
"time"设置为当前的日期时间(UTC)。您可以通过实施自己的IDateTimeHandler并将其注入 DI 容器来覆盖此设置。 -
"data"包含作为消息发送或接收的 .NET 对象的 JSON 表示:-
MessageBusBuilder上的ConfigureSerializationOptions让您能够配置序列化和反序列化消息时将使用的System.Text.Json.JsonSerializerOptions。 -
要注入其他属性或在框架构建消息信封后对其进行转换,您可以实施
ISerializationCallback并通过MessageBusBuilder上的AddSerializationCallback注册它。
-