使用RabbitMQ订阅一组消费者?

时间:2017-10-05 08:18:46

标签: rabbitmq messaging publish-subscribe messagebroker

我不完全确定这是正确的问题,但我对RabbitMQ实现发布/订阅消息传递系统的功能有疑问。我正在调查RabbitMQ,看它是否符合我工作的公司的需求,而且我无法在官方文档或互联网上找到这些问题的任何答案:

  • 消费者是否可以订阅一组发布商?我想有可能,如果我们想要订阅的所有发布者都将他们的消息发送到交换机,然后将它们转发给订户。实现这个最合适的呼出类型是什么?
  • 是否可以订阅一组主题?例如,如果我们有几个以“data”开头的主题,比如data_1,data_2等,那么消费者是否可以订阅“数据*”?我没有发现任何相关内容,但从我收集的关于交换如何工作的内容来看似乎不可能。
  • 是否有可能有子主题,甚至亚子复杂? 根据我的理解,到目前为止,使用主题或标题交换,子主题和子子主题基本上是路由键的一部分,例如data.diag.signal。

我希望自己能够说清楚,并提前感谢你的答案。

1 个答案:

答案 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来进行更丰富的设计交流。