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