我不完全确定这是正确的问题,但我对RabbitMQ实现发布/订阅消息传递系统的功能有疑问 . 我正在调查RabbitMQ,看它是否符合我工作的公司的需求,我在官方文档或互联网上找不到这些问题的答案:
-
消费者是否可以订阅一组发布者?我想这是可能的,如果我们想要订阅的所有发布者都将他们的消息发送到交换机,然后将它们转发给订户 . 实现这个最合适的呼出类型是什么?
-
是否可以订阅一组主题?例如,如果我们有几个以"data"开头的主题,例如data_1,data_2等,那么消费者是否可以订阅"data*"?我似乎没有可能 .
-
是否有可能有子主题,甚至亚子复杂?根据我的理解,到目前为止,使用主题或 Headers 交换,子主题和子子主题基本上是路由键的一部分,例如data.diag.signal .
我希望自己足够清楚,并提前感谢你的答案 .
1 回答
将在我的回答中使用Java API示例 .
RMQ消费者不了解发布商 . 它们之间的实体是队列(和交换,来自 生产环境 者(出版商)) . Java API
com.rabbitmq.client.Channel.basicConsume(String, Consumer)
仅允许从一个队列中使用 . 但是你可以将相同的Consumer
回调传递给多个队列另一种方法是创建每个使用者队列,并使用
channel.queueBind
将其绑定到生成有趣消息的交换 . 或者甚至更容易,让他们发布到一些通用交换并绑定到那个 .没有明确,因为您需要传入队列名称 . 但您可以使用交换路由:如果您当前的状态是:
您还可以设置新的交易所
RMQ中没有子主题概念,但正如您所提到的,您可以使用
topic
(甚至是headers
,用于更丰富的设计)交换 .