订阅一群使用RabbitMQ的消费者?

订阅一群使用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,更丰富的设计)交流。

+0

谢谢你的回答,这是非常有帮助的!关于话题交换的通配符,我知道可以订阅诸如A.B. *或A。*。*之类的话题,但是可以订阅诸如A。*。C之类的话吗? –