我不完全确定这是正确的问题,但我对RabbitMQ实现发布/订阅消息传递系统的功能有疑问。我正在调查RabbitMQ,看它是否符合我工作的公司的需求,而且我无法在官方文档或互联网上找到这些问题的任何答案:
我希望自己能够说清楚,并提前感谢你的答案。
答案 0 :(得分:0)
在我的回答中将使用Java API示例。
消费者是否可以订阅一组发布商?
RMQ消费者不了解发布商。它们之间的实体是队列(和交换,来自生产者(发布者))。
Java API scp
仅允许从一个队列中使用。但是您可以将相同的com.rabbitmq.client.Channel.basicConsume(String, Consumer)
回调传递给多个队列
另一种方法是创建每个使用者队列,并使用Consumer
将其绑定到生成有趣消息的交换。或者甚至更容易,让他们发布到一些通用交换并绑定到那个。
是否可以订阅一组主题?例如,如果我们有几个以“data”开头的主题,比如data_1,data_2等,那么消费者是否可以订阅“数据*”?我没有发现任何相关内容,但从我收集的关于交换如何工作的内容来看似乎不可能。
不明确,因为您需要传入队列名称。 但您可以使用交换路由: 如果您当前的状态是:
channel.queueBind
您还可以设置新的交换
producer1 -> exchange-data-1 -> queue-data-1
producer2 -> exchange-data-2 -> queue-data-2
producer3 -> exchange-data-3 -> queue-data-3
是否有可能有子主题,甚至亚子复杂?根据我的理解,到目前为止,使用主题或标题交换,子主题和子子主题基本上是路由键的一部分,例如data.diag.signal。
RMQ中没有子主题概念,但正如您所提到的,您可以使用producer1 -> exchange-data-1 --\
producer2 -> exchange-data-2 -> exchange-data-all -> queue-per-consumer -> your-consumer
producer3 -> exchange-data-3 --/
(甚至topic
来进行更丰富的设计交流。