Rebus RabbitMQ IHandleMessage не работает - PullRequest
0 голосов
/ 20 мая 2019

У меня есть служба .NET Core, которая публикует события в Rebus с RMQ Transport со следующей конфигурацией:

            services.AddRebus(configure => configure
                .Logging(x => x.Serilog())
                .Transport(x => x.UseRabbitMq(rabbitMqConnection, "ServiceA"))
                .Routing(x => x.TypeBased()));

Когда я запускаю ее, она, кажется, публикует событие в обмен RebusTopics.Таким образом, служба B имеет следующую конфигурацию:

            services.AutoRegisterHandlersFromAssemblyOf<MyHandler1>();

            services.AddRebus(configure => configure
                .Logging(x => x.Serilog() )
                .Transport(x => x.UseRabbitMq(rabbitMqConnection, "ServiceB"))
                .Routing(x => x.TypeBased()));

и обработчик:

    public class MyHandler1: IHandleMessages<ServiceAEvent>
    {
        public CreateMinisiteWhenPageIsCreated(){}

        public Task Handle(PageCreated message)
        {

            //do stuff..

            return Task.CompletedTask;
        }

Кажется, что существует привязка к обмену RebusDirect к новой очереди ServiceB, но когда яопубликуйте событие из ServiceA, обработчик никогда не сработает в ServiceB ... нет привязки в обмене RebusTopics для этого типа сообщения.

Я схожу с ума от удивления, почему, по синтаксису он очень похож на NServiceBus, оченьне понимает, почему он не работает.

1 Ответ

1 голос
/ 20 мая 2019

Мне кажется, что ваш подписчик должен

await bus.Subscribe<ServiceAEvent>();

Если экземпляр шины с входной очередью с именем ServiceB выполняет вышеуказанный вызов, будет создана привязка из темы, имя которой происходит от типа ServiceAEvent, к входной очереди шины.

После того, как это будет сделано, оно будет получать событие всякий раз, когда другой экземпляр шины вызывает

await bus.Publish(new ServiceAEvent(...));
...