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();
我有一个 .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();