使用 RabbitMQ 订阅一组消费者?

Subscribe to a group of consumers using RabbitMQ?

我不完全确定这是问的正确地方,但我对 RabbitMQ 实现 publish/subscribe 消息传递系统的功能有疑问。我正在研究 RabbitMQ,看看它是否符合我工作的公司的需要,但我在官方文档或互联网上都找不到这些问题的任何答案:

我希望我说得够清楚了,我提前感谢你的回答。

将在我的回答中使用 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,为了更丰富的设计)交换。