RabbitMQ 点对点或发布订阅

Ric*_*ard 4 jms rabbitmq

RabbitMQ是点对点还是pub-sub?还是两者都取决于配置选项?

我一直在看配置,它们似乎都支持点对点模型而不是pub-sub。即消息一旦被消费就从队列中删除,并且不能被第二个消费者使用。

Axe*_*ehl 8

从概念上讲,RabbitMQ 既是点对点的又是发布订阅的。您可以将您的侦听器应用程序注册到 RabbitMQ 交换的主题,并接收发布到该主题的所有消息。所以这显然是“发布 - 订阅”。无论您想到什么应用程序架构,都可以使用发布-订阅概念来实现它。

然而,就像 IBM MQ 一样,RabbitMQ 一开始是一个“排队系统”(注意 MQ)。因此,为了实现 pub-sub,他们只是在排队系统之上构建了 pub-sub。这是可行的,但在配置方面可能会感觉有点奇怪(例如,为什么你需要设置一个交换)并且可能不如在其 DNA 中以 pub-sub 开头的消息传递系统那么有效。

如果您只想使用 pub-sub 并且有数百个消费者,那么可能有更好的选择,也许是使用 UDP 多播来分发数据的消息传递系统。


Luk*_*ken 7

如果你想使用 RabbitMQ 作为发布-订阅,即消息不会被第一个消费者删除,并且可以被许多订阅者消费。你会如何计算 RabbitMQ?

使用扇出交换。每个消费者声明自己的独占队列,绑定到该交换器。当消息发布到交换器时,它会被路由到与其绑定的所有队列。

请阅读 RabbitMQ 文档和教程,其中解释了所有这些概念。