在 C# 中将 Azure 服务总线队列迁移到主题和订阅
Migrating Azure Service Bus Queue to Topic and Subscription in C#
我可以通过重新配置路径名将 Azure 服务总线队列迁移到主题和订阅吗?
是否需要更改任何代码?
如果我保持相同的名称,第 3 方是否必须更改他们的代码?
不,如果您尝试发送到带有 QueueClient
的主题,您将得到一个例外:
System.InvalidOperationException: 'Cannot open a Queue client for entity type Topic.'
同样尝试从订阅中接收将导致异常:
Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException: Put token failed. status-code: 404, status-description: The messaging entity 'sb://ns.servicebus.windows.net/subscription' could not be found.
为了发送,您需要将 QueueClient
替换为具有相同构造函数的 TopicClient
。
为了接收,您将不得不使用需要主题和订阅名称的 SubscriptionClient
(因此调用构造函数的一个小改动)。
QueueClient
和TopicClient
都继承自ClientEntity
,但是ClientEntity
没有定义任何虚拟或抽象的SendAsync()
方法,所以不容易使任何东西真正通用。
所需的代码更改很少,在我的例子中,我只需要为客户端更改构造函数和声明的类型。
所以是的,如果您决定迁移,第 3 方将不得不更改他们的代码...
我可以通过重新配置路径名将 Azure 服务总线队列迁移到主题和订阅吗?
是否需要更改任何代码?
如果我保持相同的名称,第 3 方是否必须更改他们的代码?
不,如果您尝试发送到带有 QueueClient
的主题,您将得到一个例外:
System.InvalidOperationException: 'Cannot open a Queue client for entity type Topic.'
同样尝试从订阅中接收将导致异常:
Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException: Put token failed. status-code: 404, status-description: The messaging entity 'sb://ns.servicebus.windows.net/subscription' could not be found.
为了发送,您需要将 QueueClient
替换为具有相同构造函数的 TopicClient
。
为了接收,您将不得不使用需要主题和订阅名称的 SubscriptionClient
(因此调用构造函数的一个小改动)。
QueueClient
和TopicClient
都继承自ClientEntity
,但是ClientEntity
没有定义任何虚拟或抽象的SendAsync()
方法,所以不容易使任何东西真正通用。
所需的代码更改很少,在我的例子中,我只需要为客户端更改构造函数和声明的类型。
所以是的,如果您决定迁移,第 3 方将不得不更改他们的代码...