Rebus RabbitMQ IHandleMessage 不工作

Rebus RabbitMQ IHandleMessage Not working

我有一个 .NET Core 服务使用 RMQ Transport 将事件发布到 Rebus,配置如下:

            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 非常相似,所以非常困惑为什么它不起作用。

我觉得您的订阅者需要

await bus.Subscribe<ServiceAEvent>();

如果具有名为 ServiceB 的输入队列的总线实例进行上述调用,将从主题(其名称派生自 ServiceAEvent 类型)创建一个绑定到总线'输入队列。

完成后,每当另一个总线实例调用时,它将接收事件

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

只需在消费者的 Starup.cs 中添加 app.ApplicationServices.UseRebus(); 即可,无需再订阅。 ProducerApp 可以 bus.Send() 而不是 bus.Publish();