Rebus RabbitMQ IHandleMessage不起作用

时间:2019-05-20 15:43:33

标签: rebus rebus-rabbitmq

我有一个.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非常相似,以至于为什么不起作用。

2 个答案:

答案 0 :(得分:1)

在我看来,您的订户需要

await bus.Subscribe<ServiceAEvent>();

如果具有名为ServiceB的输入队列的总线实例进行了上述调用,则会从名称从ServiceAEvent类型派生的主题创建到总线的输入队列的绑定

完成此操作后,只要另一个总线实例调用,它将接收事件

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

答案 1 :(得分:1)

只需在消费者的Starup.cs中添加app.ApplicationServices.UseRebus();,也无需订阅。 ProducerApp可以使用bus.Send()代替bus.Publish();