首页 文章

使用RabbitMQ订阅一组消费者?

提问于
浏览
0

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

  • 消费者是否可以订阅一组发布者?我想这是可能的,如果我们想要订阅的所有发布者都将他们的消息发送到交换机,然后将它们转发给订户 . 实现这个最合适的呼出类型是什么?

  • 是否可以订阅一组主题?例如,如果我们有几个以"data"开头的主题,例如data_1,data_2等,那么消费者是否可以订阅"data*"?我似乎没有可能 .

  • 是否有可能有子主题,甚至亚子复杂?根据我的理解,到目前为止,使用主题或 Headers 交换,子主题和子子主题基本上是路由键的一部分,例如data.diag.signal .

我希望自己足够清楚,并提前感谢你的答案 .

1 回答

  • 0

    将在我的回答中使用Java API示例 .

    消费者是否可以订阅一组发布者?

    RMQ消费者不了解发布商 . 它们之间的实体是队列(和交换,来自 生产环境 者(出版商)) . Java API com.rabbitmq.client.Channel.basicConsume(String, Consumer) 仅允许从一个队列中使用 . 但是你可以将相同的 Consumer 回调传递给多个队列

    另一种方法是创建每个使用者队列,并使用 channel.queueBind 将其绑定到生成有趣消息的交换 . 或者甚至更容易,让他们发布到一些通用交换并绑定到那个 .

    是否可以订阅一组主题?例如,如果我们有几个以“data”开头的主题,比如data_1,data_2等,那么消费者是否可以订阅“数据*”?我没有发现任何相关内容,但从我收集的关于交换如何工作的内容中看似不可能 .

    没有明确,因为您需要传入队列名称 . 但您可以使用交换路由:如果您当前的状态是:

    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 --/
    

    是否有可能有子主题,甚至亚子复杂?根据我的理解,到目前为止,使用主题或 Headers 交换,子主题和子子主题基本上是路由键的一部分,例如data.diag.signal .

    RMQ中没有子主题概念,但正如您所提到的,您可以使用 topic (甚至是 headers ,用于更丰富的设计)交换 .

相关问题