【问题标题】:How to route to queues without knowing their name in advance?如何在不事先知道他们的名字的情况下路由到队列?
【发布时间】:2014-07-13 21:46:34
【问题描述】:

我想弄清楚,是否可以在 RabbitMQ 中使用一些默认路由方案/交换来实现以下目标:

我有一些设备和设备组的基本层次结构,其中一个设备始终属于一个组。

group_a
  device_1  (queue: group_a.device_1)
  device_2  (queue: group_a.device_2)

理想情况下,我希望每个组(例如group_a)都有一个生产者,以保持连接和通道打开。然后,当需要将消息发布到该组的设备(例如device_1)时,生产者将使用设备名称作为路由键将消息发送到预定义的交换器。交换将使用路由键作为队列名称并将消息放入该队列。

棘手的部分是:新设备(例如device_3)可能会在生产者的生命周期内出现。因此,我无法提前将路由键绑定到以设备命名的队列。

要解决的一个问题是每次需要手动按需传递消息时创建队列和绑定,这对我来说听起来有点开销。

第二种解决方案可能是我将有关新设备的信息传递给生产者,然后生产者添加新绑定。

但也许有一种更简单的方法,使用某种动态路由,可以按需自动创建队列。

【问题讨论】:

    标签: routing rabbitmq message-queue


    【解决方案1】:

    如果您愿意,您可以将消息发布到默认交换器(无名),其路由键等于它指定的队列。

    来自官方RabbitMQ tuttorial

    默认交换是没有名字的直接交换(空字符串) 经纪人预先申报。它有一个特殊的属性,使它 对于简单的应用程序非常有用:创建的每个队列都是 使用与路由键相同的路由键自动绑定到它 队列名称。

    【讨论】:

    • 听起来不错。我在文档中没有看到的一件事是,如果我在不存在队列的情况下使用路由键会发生什么。当我同步发送消息时会收到错误/nak 还是被静默丢弃?
    • 除非您设置(替代 Exchange)[rabbitmq.com/ae.html] 没有收件人的邮件将被静默丢弃。
    猜你喜欢
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多