如何配置RabbitMQ双向铲并避免无限循环?

时间:2018-04-26 14:08:22

标签: rabbitmq rabbitmq-shovel

我在不同的数据中心有2个RabbitMQ群集。目前我们正在铲除从一只兔子到另一只兔子的交换之一,但现在我们也需要向另一个方向铲除。如何在不造成无限循环的情况下实现这一目标?

一位同事认为我们可以勾选"添加转发标题"选项,然后使用标头交换过滤。但是,添加的标题似乎是嵌套的,而且我找不到与标题匹配的方法?

1 个答案:

答案 0 :(得分:0)

根据您提供的其他说明似乎:

  • 你在交换之间使用铲子
  • 猜测交换类型是扇出

我可以看到两种方法来处理你想要做的事情:

  • 使用federation,并在每个群集中的交换机之间双向配置
  • 仍然使用铲子,但在每个交换机上定义一个新队列并配置队列到队列铲斗

铲斗选项: 您在群集1上有交换A,在群集2上交换A, 每个群集上的main_queue

  • 在每个群集上创建一个secondary_queue,绑定以交换A.
  • 从群集1上的辅助队列创建铲到群集2上的main_queue
  • 从群集2上的辅助队列创建铲到群集1上的main_queue

联邦的好处:即使您配置了复杂的路由,也会更简单

铲子的好处:如果你有重大连接中断的风险(我会说超过一分钟)会更好。在这种情况下,您不会丢失消息,而在联合案例中可能会发生某些消息无法在两个集群上复制的情况。