RabbitMQ 点对点或发布-订阅

7
RabbitMQ是点对点还是发布订阅呢?或者说这取决于配置选项吗?
我一直在查看配置,它们都支持点对点模式而不是发布订阅。即一旦消息被消费,它就从队列中删除,并且不可用于第二个消费者。

我认为要做到这一点,你需要将消息路由到第二个消费者。RabbitMq具有使用通配符和其他功能的高级路由系统。 - Mehdi Benmesssaoud
2个回答

13
从概念上讲,RabbitMQ既是点对点,又是发布-订阅。您可以将监听应用程序注册到RabbitMQ交换机的主题并接收所有发布到该主题的消息。因此,这显然是 "发布-订阅"。无论您构思的应用程序架构是什么样子,都可以使用 "发布-订阅" 概念来实现它。
但是,就像IBM MQ一样,RabbitMQ最初是作为“排队系统”(请注意MQ)开始的。因此,为了实现“发布-订阅”,他们只是在排队系统之上构建了“发布-订阅”。这种方法确实有效,但在配置方面可能感觉有些奇怪(例如,为什么需要设置交换机),而且可能不如具有“发布-订阅”基因的消息系统高效。
如果您只想使用“发布-订阅”并有数百个消费者,则可能存在更好的选择,例如使用UDP组播分发数据的消息系统。

1
谢谢Axel。如果您想将RabbitMQ用作发布-订阅,即使第一个消费者不删除消息,也可以被多个订阅者消耗。您会如何处理RabbitMQ? - Richard
对于Java,请查看https://www.rabbitmq.com/tutorials/tutorial-five-java.html-或根据您的编程语言在https://www.rabbitmq.com/getstarted.html下查看“主题”。 - Axel Podehl

7
如果你想将RabbitMQ用作发布-订阅,即消息不会被第一个消费者删除,并且可以被多个订阅者使用。你该如何使用RabbitMQ?
使用fanout交换器。每个消费者声明自己的独占队列,绑定到该交换器。当消息发布到交换器时,它将路由到与之绑定的所有队列。
请阅读RabbitMQ文档和教程,这些概念都有详细解释。

注意: RabbitMQ团队会监控rabbitmq-users 邮件列表,但只会偶尔在StackOverflow上回答问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接