Rabbitmq 和捕获所有队列

Rabbitmq and catch all queue

在我的公司,我在不同的 android 设备上 运行 进行一系列测试 运行。

今天的测试(即任务)运行 在一个有多个工作人员的队列中。

我想将这个单个队列分成多个队列,每个设备一个,以便根据我公司拥有的 X 设备数量优化测试启动(即,如果我的公司有 2 个 A 设备,我想在其上发送测试设备 A 与单个工作人员一起使用 --concurrency=2 排队,以便我可以连续启动最多两个测试)。

我不想一次全部迁移,所以我正在迈出实现混合版本的第一步,我想实现的逻辑如下。

设备A(有两个)和B(只有一个)继续排队A 和队列 B 而所有其他队列在旧的 legacy 中。

我的问题是 legacy 队列。如果我在设备 C 上发送测试,我所做的就是将任务发送到队列 C,因为 catch_all 队列被命名为 legacy 没有收到任务。 我正在寻找一种方式来表达: "please Rabbitmq use queue legacy if an existing queue name does not match with the device name".

有办法实现吗?

您可以结合使用备用交换 (https://www.rabbitmq.com/ae.html) 和路由键绑定来做到这一点

您的设置将使用代表设备的绑定键通过交换绑定 QueueA 和 QueueB。

| exchange| binding  | queue  |
|---------|----------|--------|
|  my.ex  | device.a | QueueA |
|  my.ex  | device.b | QueueB |

当您从设备 A 发布消息时,它的路由键为 device.a 并且会转到 QueueA。

现在,对于所有旧设备,您将在交换配置上设置备用交换。这会将与 device.adevice.b 路由键不匹配的消息传递到备用交换。

备用交换然后会将所有消息路由到旧队列。