Rabbitmq并捕获所有队列

时间:2016-07-28 10:55:38

标签: queue rabbitmq catch-all

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

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

我想将这个单个队列分成多个队列,每个设备一个,以便根据我公司有多少个X设备来优化测试启动(即如果我的公司有2个A设备,我想在设备A上发送测试在具有--concurrency = 2的单个worker的队列中,以便我可以连续启动最多两个测试。)

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

设备 A (有两个)和 B (它只有一个)进入队列 A 并排队 B ,而旧传统中的所有其他人

enter image description here

我的问题在于传统队列。如果我在设备C上发送测试,我所做的就是将任务发送到队列 C ,因为catch_all队列名为 legacy ,因此未收到任务。 我正在寻找一种说法: "如果现有队列名称与设备名称不匹配,请Rabbitmq使用队列旧版

有办法实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

您可以使用备用Exchange(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路由密钥不匹配的邮件传递到备用交换机。

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