Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
注意
本文为迁移 WindowsAzure.ServiceBus 过程中现有应用提供了AMQP配置和序列化细节。 使用 迁移指南 迁移到受支持的 Azure.Messaging.ServiceBus 库。
Important
Azure 服务总线 库 WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus 和 com.microsoft.azure:azure-servicebus 将于 2026 年 10 月 31 日在 Azure 中国停用。 在该日期之后,他们将不再获得官方支持或更新。 停用后,应用程序可以继续将这些库与 AMQP 配合使用,但应迁移到当前库,以继续接收安全更新和错误修复。
对于 服务总线,迁移到适用于 .NET 的 Azure.Messaging.ServiceBus 或适用于 Java 的 com.azure:azure-messaging-servicebus。 请参阅WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus和com.microsoft.azure:azure-servicebus的迁移指南。
SBMP也将于2026年10月31日在 Azure 中国停用。 使用 AMQP 进行 服务总线 消息传递。 对 WindowsAzure.ServiceBus 的 Azure WCF Relay 支持将继续,直至另行通知。 有关背景信息,请参阅全球退休公告。
WindowsAzure.ServiceBus默认为服务总线消息传送协议(SBMP)。 2.1及以后版本也提供AMQP 1.0。 在 Azure 中国于 2026 年 10 月 31 日停用 SBMP 后,明确选择 AMQP,以便继续使用此库。
若要使用 AMQP 1.0 而不是默认协议,需要对服务总线连接字符串进行显式配置,或者通过 TransportType 选项在客户端构造函数中进行配置。 除了此更改之外,在使用 AMQP 1.0 时应用程序代码基本保持不变。
使用 AMQP 时,有几项 API 功能不受支持。 这些不受支持的功能在行为差异部分列出。 在使用 AMQP 时,一些高级配置设置还具有不同的含义。
配置连接字符串以使用 AMQP 1.0
将 ;TransportType=Amqp 追加到连接字符串,指示客户端使用 AMQP 1.0 与服务总线建立连接。 例如,
Endpoint=sb://[namespace].servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=Amqp
其中 namespace 和 SAS key 是在创建服务总线命名空间时从 Azure 门户获取的。 有关详细信息,请参阅使用 Azure 门户创建服务总线命名空间。
基于 WebSockets 的 AMQP
若要通过 WebSocket 使用 AMQP,请在连接字符串中将 TransportType 设置为 AmqpWebSockets。 例如:Endpoint=sb://[namespace].servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=[SAS key];TransportType=AmqpWebSockets。
消息序列化
使用 SBMP 时,WindowsAzure.ServiceBus系统对 BrokeredMessage 的正文使用了 DataContractSerializer。 在AMQP中,库使用AMQP类型系统来表示消息体。 这种表示方式允许其他平台上的应用程序(例如使用 JMS 的 Java 应用程序)解释支持的正文类型。
构造 BrokeredMessage 实例时,可以提供 .NET 对象作为构造函数的参数以充当消息的正文。 对于可映射到 AMQP 基元类型的对象,正文序列化为 AMQP 数据类型。 如果该对象不能直接映射到 AMQP 基元类型(即,应用程序定义的自定义类型),则使用 DataContractSerializer序列化对象,并且已序列化的字节将在 AMQP 数据消息中发送。
为了便于使用非 .NET 客户端进行互操作,仅在消息的正文中使用可直接序列化为 AMQP 类型的 .NET 类型。 下表详细介绍了这些类型以及到 AMQP 类型系统的相应映射。
| .NET 主体对象类型 | 映射的 AMQP 类型 | AMQP 正文部分类型 |
|---|---|---|
| bool | 布尔值 | AMQP 值 |
| 字节 | ubyte | AMQP 值 |
| ushort | ushort | AMQP 值 |
| uint | uint | AMQP 值 |
| ulong | ulong | AMQP 值 |
| sbyte | 字节 | AMQP 值 |
| 短 | 短 | AMQP 值 |
| int | int | AMQP 值 |
| 长整型 | 长整型 | AMQP 值 |
| float | float | AMQP 值 |
| 双精度浮点数 | 双精度浮点数 | AMQP 值 |
| 十进制 | decimal128 | AMQP 值 |
| 字符型 | 字符型 | AMQP 值 |
| DateTime | 时间戳 | AMQP 值 |
| Guid | uuid | AMQP 值 |
| byte[] | 二进制 | AMQP 值 |
| 字符串 | 字符串 | AMQP 值 |
| System.Collections.IList | 列表 | AMQP 值:集合中包含的项只能是此表中定义的类型。 |
| System.Array | 数组 | AMQP 值:集合中包含的项只能是此表中定义的类型。 |
| System.Collections.IDictionary | 映射 | AMQP 值:集合中包含的项只能是此表中定义的项。注意:仅支持字符串键。 |
| Uri | 所述 string(请参阅下表) | AMQP 值 |
| DateTimeOffset | 长描述(请参阅下表) | AMQP 值 |
| TimeSpan | 描述为长整型(请参阅下文) | AMQP 值 |
| Stream | 二进制 | AMQP 数据(可能有多个)。 数据部分包含从流对象读取的原始字节。 |
| 其他对象 | 二进制 | AMQP 数据(可能有多个)。 包含使用 DataContractSerializer 或应用程序提供的序列化程序的对象的已序列化二进制值。 |
| .NET 类型 | 映射的 AMQP 描述类型 | 备注 |
|---|---|---|
| Uri | <type name="uri" class=restricted source="string"> <descriptor name="com.microsoft:uri" /></type> |
Uri.AbsoluteUri |
| DateTimeOffset | <type name="datetime-offset" class=restricted source="long"> <descriptor name="com.microsoft:datetime-offset" /></type> |
DateTimeOffset.UtcTicks |
| TimeSpan | <type name="timespan" class=restricted source="long"> <descriptor name="com.microsoft:timespan" /></type> |
TimeSpan.Ticks |
行为差异
在将现有 WindowsAzure.ServiceBus 应用从 SBMP 迁移到 AMQP 时,请考虑以下差异:
- 将忽略 OperationTimeout 属性。
-
MessageReceiver.Receive(TimeSpan.Zero)是以MessageReceiver.Receive(TimeSpan.FromSeconds(10))的形式实现的。 - 通过锁定令牌完成消息只能由最初收到消息的消息接收方完成。
控制 AMQP 协议设置
.NET API 公开了几项设置以控制 AMQP 协议的行为:
- MessageReceiver.PrefetchCount:控制应用于链接的初始信用。 默认值为 0。
- MessagingFactorySettings.AmqpTransportSettings.MaxFrameSize:控制在打开连接时协商期间提供的最大 AMQP 帧大小。 默认值为 65,536 字节。
- MessagingFactorySettings.AmqpTransportSettings.BatchFlushInterval:如果可批量传输,则此值确定发送处置的最大延迟。 默认情况下由发送方/接收方继承。 单个发送方/接收方可以覆盖默认设置(即 20 毫秒)。
- MessagingFactorySettings.AmqpTransportSettings.UseSslStreamSecurity:控制是否通过 TLS 连接建立 AMQP 连接。 默认值为 true。
后续步骤
准备好了解详细信息? 请访问以下链接: