是否可以使用 AMQP.Net Lite 库连接到 Azure 服务总线中的分区主题?
Is it possible to connect to partitioned topic in Azure Service Bus with AMQP.Net Lite library?
我的客户端 .NET Core 应用程序使用 AMQP.Net Lite library 与 Azure 服务总线一起工作。当服务总线命名空间中的主题未分区(Enable Partitioning
变为 OFF)时,一切正常 - 我能够连接并创建 ReceiverLink
对象接收消息。
但是,一旦主题被分区(Enable Partitioning
变为 ON),我在 ReceiverLink
创建对象后立即收到以下错误。
错误描述为:“无法为实体类型订阅者打开主题客户端。”
错误代码转换为 AMQP 映射为 amqp:not-allowed
。根据the docs,这意味着“对方试图以与规范中定义的语义不一致的方式使用框架。”老实说,我很难理解它在 Azure 服务总线抽象方面的含义,但它听起来令人沮丧并且类似于“不可能”对我来说...
另一方面,the MS docs state AMQP 可用于发送和接收消息:
AMQP is now supported for sending and receiving messages to and from a partitioned entity.
所以,问题是是否完全可以使用 AMQP.NET Lite 库从 Azure 服务总线中的分区主题接收消息?
另一方面,the MS docs state AMQP 可用于发送和接收消息:
AMQP is now supported for sending and receiving messages to and from a
partitioned entity
Microsoft 文档中的这篇文章发表于 2020 年 6 月 23 日:
但 AMQP.Net Lite library 的最后一次更新是 5 个月前,因此现在不太可能提供支持并且尚未添加到开源库中:
您可以在 Github repo
中提出拉取请求或问题以获得支持
显然,这是 Azure 服务总线中的一个错误。但是,有一个解决方法。
而不是像这样创建 ReceiverLink
:
var r = new ReceiverLink(session, "SubscriptionName", "TopicName");
这样创建:
var r = new ReceiverLink(session, string.Empty, "TopicName/Subscriptions/SubscriptionName");
注意:第二个参数可以是任意字符串。
我的客户端 .NET Core 应用程序使用 AMQP.Net Lite library 与 Azure 服务总线一起工作。当服务总线命名空间中的主题未分区(Enable Partitioning
变为 OFF)时,一切正常 - 我能够连接并创建 ReceiverLink
对象接收消息。
但是,一旦主题被分区(Enable Partitioning
变为 ON),我在 ReceiverLink
创建对象后立即收到以下错误。
错误描述为:“无法为实体类型订阅者打开主题客户端。”
错误代码转换为 AMQP 映射为 amqp:not-allowed
。根据the docs,这意味着“对方试图以与规范中定义的语义不一致的方式使用框架。”老实说,我很难理解它在 Azure 服务总线抽象方面的含义,但它听起来令人沮丧并且类似于“不可能”对我来说...
另一方面,the MS docs state AMQP 可用于发送和接收消息:
AMQP is now supported for sending and receiving messages to and from a partitioned entity.
所以,问题是是否完全可以使用 AMQP.NET Lite 库从 Azure 服务总线中的分区主题接收消息?
另一方面,the MS docs state AMQP 可用于发送和接收消息:
AMQP is now supported for sending and receiving messages to and from a partitioned entity
Microsoft 文档中的这篇文章发表于 2020 年 6 月 23 日:
但 AMQP.Net Lite library 的最后一次更新是 5 个月前,因此现在不太可能提供支持并且尚未添加到开源库中:
您可以在 Github repo
中提出拉取请求或问题以获得支持显然,这是 Azure 服务总线中的一个错误。但是,有一个解决方法。
而不是像这样创建 ReceiverLink
:
var r = new ReceiverLink(session, "SubscriptionName", "TopicName");
这样创建:
var r = new ReceiverLink(session, string.Empty, "TopicName/Subscriptions/SubscriptionName");
注意:第二个参数可以是任意字符串。