将Rebus用作RabbitMq消息代理上的消息总线,以启用事件驱动的微服务之间的通信。 使用bus.Send(command)服务A在特定的队列上发送命令,服务B已订阅该队列。我们正在使用基于类型的路由。
在命令工作流期间,服务B需要发出事件以更改状态(执行A,执行A等)。事件的处理程序之一将仅在服务B中(据说它将侦听特定事件并调用另一个api)。
要实现此目的,我是否需要在服务B中拥有3个实例?一个是从服务A订阅命令,另一个是引发事件,第三个是处理事件?
答案 0 :(得分:0)
服务B是否需要3个实例?一个是从服务A订阅命令,另一个是引发事件,第三个是处理事件?
否,服务B中仅需要一个Rebus实例。
一个Rebus端点(带有一个输入队列)足以:
...接收命令(您已经知道)
...订阅事件(例如await bus.Subscribe<YourEvent>();
)
...发布事件(例如await bus.Publish(new YourEvent(...);
)
...接收事件(因为您订阅了该事件,因此从以您的YourEvent
类型命名的主题创建了一个绑定来服务B的输入队列。