使用 RabbitMQ 订阅一组消费者?
Subscribe to a group of consumers using RabbitMQ?
我不完全确定这是问的正确地方,但我对 RabbitMQ 实现 publish/subscribe 消息传递系统的功能有疑问。我正在研究 RabbitMQ,看看它是否符合我工作的公司的需要,但我在官方文档或互联网上都找不到这些问题的任何答案:
- 消费者是否可以订阅一组发布者?我想这是可能的,如果我们想要订阅的组中的所有发布者都将他们的消息发送到一个交换器,然后再将它们转发给订阅者。什么是最合适的交换类型来实现这个?
- 是否可以订阅主题群?例如,如果我们有几个以 "data" 开头的主题,例如 data_1、data_2 等,是否可以让消费者订阅 "data*" ?我没有在这方面找到任何东西,但从我收集到的关于交易所如何运作的信息来看,这似乎是不可能的。
- 有没有可能sub-topics,甚至sub-sub-sopics?
据我目前所知,使用主题或 header 交换,sub-topics 和 sub-sub-topics 基本上是路由键的一部分,例如 data.diag.signal。
我希望我说得够清楚了,我提前感谢你的回答。
将在我的回答中使用 Java API 个示例。
Is it possible for a consumer to subscribe to a group of publishers?
RMQ 消费者不知道发布者。它们之间的实体是队列(和交换,来自生产者(发布者)方)。
Java API com.rabbitmq.client.Channel.basicConsume(String, Consumer)
只允许从一个队列消费。但是您可以将相同的 Consumer
回调传递给多个队列
另一种方法是创建每个消费者队列,并使用 channel.queueBind
将其绑定到产生有趣消息的交换。或者更简单,让他们发布到一些通用交换并绑定到那个交换。
Is it possible to subscribe to a group of topics? For example if we have several topics starting by "data", like data_1, data_2 etc, would it be possible to have consumers subscribe to "data*" ? I didn't find anything on this but from what I gathered on how exchanges work it doesn't seem possible.
不明确,因为您需要传入队列名称。
但是您可以使用交换路由来解决:
如果您当前的状态是:
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 --/
Is it possible to have sub-topics, and even sub-sub-sopics? From what I understand so far, using a topic or header exchange, sub-topics and sub-sub-topics would basically be parts of the routing key, like data.diag.signal for example.
RMQ中没有子主题的概念,但是,正如你所说,你可以使用topic
(甚至headers
,为了更丰富的设计)交换。
我不完全确定这是问的正确地方,但我对 RabbitMQ 实现 publish/subscribe 消息传递系统的功能有疑问。我正在研究 RabbitMQ,看看它是否符合我工作的公司的需要,但我在官方文档或互联网上都找不到这些问题的任何答案:
- 消费者是否可以订阅一组发布者?我想这是可能的,如果我们想要订阅的组中的所有发布者都将他们的消息发送到一个交换器,然后再将它们转发给订阅者。什么是最合适的交换类型来实现这个?
- 是否可以订阅主题群?例如,如果我们有几个以 "data" 开头的主题,例如 data_1、data_2 等,是否可以让消费者订阅 "data*" ?我没有在这方面找到任何东西,但从我收集到的关于交易所如何运作的信息来看,这似乎是不可能的。
- 有没有可能sub-topics,甚至sub-sub-sopics? 据我目前所知,使用主题或 header 交换,sub-topics 和 sub-sub-topics 基本上是路由键的一部分,例如 data.diag.signal。
我希望我说得够清楚了,我提前感谢你的回答。
将在我的回答中使用 Java API 个示例。
Is it possible for a consumer to subscribe to a group of publishers?
RMQ 消费者不知道发布者。它们之间的实体是队列(和交换,来自生产者(发布者)方)。
Java API com.rabbitmq.client.Channel.basicConsume(String, Consumer)
只允许从一个队列消费。但是您可以将相同的 Consumer
回调传递给多个队列
另一种方法是创建每个消费者队列,并使用 channel.queueBind
将其绑定到产生有趣消息的交换。或者更简单,让他们发布到一些通用交换并绑定到那个交换。
Is it possible to subscribe to a group of topics? For example if we have several topics starting by "data", like data_1, data_2 etc, would it be possible to have consumers subscribe to "data*" ? I didn't find anything on this but from what I gathered on how exchanges work it doesn't seem possible.
不明确,因为您需要传入队列名称。 但是您可以使用交换路由来解决: 如果您当前的状态是:
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 --/
Is it possible to have sub-topics, and even sub-sub-sopics? From what I understand so far, using a topic or header exchange, sub-topics and sub-sub-topics would basically be parts of the routing key, like data.diag.signal for example.
RMQ中没有子主题的概念,但是,正如你所说,你可以使用topic
(甚至headers
,为了更丰富的设计)交换。