通知消息的所有消费者

Notifying all consumers of a message

我们正在使用 Rebus 4.2.1 和 RabbitMQ

我们想要实现的是让三个(或更多)实例上的处理程序都对同一消息做出反应。

据我所知(这可能是错误的)- IBus 界面上的 .Publish 应该做到这一点(我们已经 运行 在 MSMQ 上做到了)。

我对 RabbitMQ 的工作原理有什么遗漏吗?

(编辑:我认为 RabbitMQ 中使用的术语是 "fanout" 风格的消息)

EDIT2:mookid8000 让我走上正轨 - 问题是每个副本都在请求相同的队列。一旦我做到这一点 - 一切都开始按预期(和预期)工作。

使用 Rebus + RabbitMQ,这非常简单,因为 RabbitMQ 原生支持基于主题的 pub/sub 消息传递。

在每个订阅者中,您只需调用

await bus.Subscribe<YourEvent>();

这将使 Rebus 从您的事件类型中生成主题字符串,然后将其绑定到订阅者的输入队列,然后在发布者中您

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

然后每个订阅者都会在其输入队列中获得事件的副本。

在幕后,Rebus 使用 RabbitMQ 的 "Topic Exchange" 交换类型来完成这项工作。