订阅一群使用RabbitMQ的消费者?
问题描述:
我不能完全肯定这是提出正确的地方,但我对的RabbitMQ的运作问题,实现发布/订阅消息系统。我调查的RabbitMQ,看它是否适合我工作的公司的需要,我找不到任何回答这些问题无论是在官方文档或在互联网上:订阅一群使用RabbitMQ的消费者?
- 是否有可能为一消费者订阅一组发布者?我想这是可能的,如果我们想要订阅的所有发布者都将他们的消息发送给交换机,然后将它们转发给订阅者。执行此操作最适合的呼气类型是什么?
- 是否可以订阅一组主题?例如,如果我们有几个以“数据”开头的主题,比如data_1,data_2等,是否有可能让消费者订阅“data *”?我没有找到任何关于这方面的信息,但是从我所了解的交流工作方式看来,这似乎不太可能。
- 是否可以有子课题,甚至是分次sopics? 从我目前了解的情况来看,使用主题或标题交换,子主题和子子主题基本上都是路由关键字的一部分,例如data.diag.signal。
我希望我已经说清楚了,我提前感谢您的回答。
答
将使用Java API的例子在我的答案。
消费者是否有可能订阅一组发布商?
RMQ消费者并不知道出版商。它们之间的实体是队列(和生产者(出版商)方面的交换)。 Java API com.rabbitmq.client.Channel.basicConsume(String, Consumer)
只允许从一个队列消耗。但是,您可以将相同的Consumer
回调传递给多个队列
另一种方法是创建每个消费者队列,并使用channel.queueBind
将其绑定到生成有趣消息的交换。或者更容易,让他们发布到一些通用交换并绑定到那个。
是否可以订阅一组主题?例如,如果我们有几个以“数据”开头的主题,比如data_1,data_2等,是否有可能让消费者订阅“data *”?我没有找到任何关于这方面的信息,但是从我所了解的交流工作方式看来,这似乎不太可能。
不是显式的,因为您需要传入队列名称。 但是你可以解决与交换路由: 如果您目前的状态是:
producer1 -> exchange-data-1 -> queue-data-1
producer2 -> exchange-data-2 -> queue-data-2
producer3 -> exchange-data-3 -> queue-data-3
你也可以建立一个新的交换
producer1 -> exchange-data-1 --\
producer2 -> exchange-data-2 -> exchange-data-all -> queue-per-consumer -> your-consumer
producer3 -> exchange-data-3 --/
是否可以有子课题,甚至分亚文化?根据我目前了解的情况,使用主题或标题交换,子主题和子主题基本上都是路由关键字的一部分,例如data.diag.signal。
有一个在RMQ无子课题的概念,但是,正如你所提到,您可以使用topic
(甚至headers
,更丰富的设计)交流。
谢谢你的回答,这是非常有帮助的!关于话题交换的通配符,我知道可以订阅诸如A.B. *或A。*。*之类的话题,但是可以订阅诸如A。*。C之类的话吗? –