user1957687
user1957687

Reputation: 89

Rebus RabbitMQ IHandleMessage Not working

I have a .NET Core service publishing events to Rebus with RMQ Transport with the following configuration:

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

When I run it, it appears to publish the event to the RebusTopics exchange. So then service B has config like this:

            services.AutoRegisterHandlersFromAssemblyOf<MyHandler1>();

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

and a handler:

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

        public Task Handle(PageCreated message)
        {

            //do stuff..

            return Task.CompletedTask;
        }

There appears to be a binding to the RebusDirect exchange to a new ServiceB queue, but when I publish an event from ServiceA, the handler never fires in ServiceB... there is no binding on the RebusTopics exchange for that message type also.

Im going crazy wondering why, its quite similar in syntax to NServiceBus so very confused as to why its not working.

Upvotes: 2

Views: 1705

Answers (2)

maniac
maniac

Reputation: 159

just add app.ApplicationServices.UseRebus(); in the Consumer's Starup.cs no need to subscribe also. ProducerApp can bus.Send() instead of bus.Publish();

Upvotes: 2

mookid8000
mookid8000

Reputation: 18628

It sounds to me like your subscriber needs to

await bus.Subscribe<ServiceAEvent>();

If the bus instance with the input queue named ServiceB makes the call above, a binding will be created from a topic, whose name is derived from the ServiceAEvent type, to the bus' input queue.

After that is done, it will receive the event whenever another bus instance calls

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

Upvotes: 1

Related Questions