Нет, если вы попытаетесь отправить тему с 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()
, поэтому сделать что-то действительно общее не так просто.
Требуемые изменения кода минимальны, в моем случае мне нужно было только изменить конструкторы и объявленные типы для клиентов.
Так что да, третьим сторонам придется изменить свой код, если вы решите перейти ...