如何在不事先知道姓名的情况下路由到队列?

时间:2014-05-24 17:19:49

标签: routing rabbitmq message-queue

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

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

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

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

棘手的部分是:新设备(例如device_3)可能会在制作人的生命周期中出现。因此,我无法将路由密钥绑定到事先以设备命名的队列。

要解决的一件事是每次需要手动按需传递消息时创建队列和绑定,这听起来像是一些开销。

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

但也许,使用某种动态路由可以更轻松地自动按需创建队列。

1 个答案:

答案 0 :(得分:2)

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

来自官方RabbitMQ tuttorial

  

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