С помощью Rebus и Azure Service Bus темы создаются, когда
a) издатель впервые публикует его или b) подписчик сначала подписывается на него
Когда я сравниваю ваши два фрагмента кода, две строки с
activator.Bus.Subscribe<SomeMessage>().Wait();
activator.Bus.Subscribe<IBusItem>().Wait();
отсутствуют в фрагменте № 2.
Если вы сделаете это:
var bus = container.Resolve<ISyncBus>(); //< NOTE: SYNC BUS!
bus.Subscribe<SomeMessage>();
Держу пари, вы получите ожидаемый топи c! 101
PS: подписка на IBusItem
не имеет никакого эффекта, если только вы не измените способ, которым Rebus отображает. NET печатает на темы. Когда вы публикуете sh экземпляр SomeMessage
, он будет опубликован в топи c, названной в честь этого типа (например, что-то вроде SomeNamespace.SomeMessage__SomeAssembly
).
У вас все еще может быть реализован обработчик IHandleMessages<IBusItem>
хотя. Механизм диспетчеризации polymorphi c запускается после получения сообщения, поэтому, пока вы подписываетесь на все необходимые типы, механизм диспетчеризации отправляет все совместимые обработчики.