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

如何配置RabbitMQ双向铲并避免无限循环?,rabbitmq,rabbitmq-shovel,Rabbitmq,Rabbitmq Shovel,我在不同的数据中心有2个RabbitMQ集群。目前,我们正在从一只兔子铲到另一只兔子,但现在我们也需要铲到另一个方向。我们如何在不引起无限循环的情况下实现这一点 一位同事认为我们可以勾选“添加转发头”选项,然后使用头交换进行过滤。但是,添加的标题似乎是嵌套的,我没有找到与标题匹配的方法?似乎基于您提供的其他说明: 你在交易所之间使用铲子 猜测交换类型为扇出 我可以看到两种方法来处理您试图做的事情: 在每个群集中的交换机之间双向使用和配置它 仍然使用“铲”,但在每个exchange上定义一个

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


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

似乎基于您提供的其他说明:

  • 你在交易所之间使用铲子
  • 猜测交换类型为扇出
我可以看到两种方法来处理您试图做的事情:

  • 在每个群集中的交换机之间双向使用和配置它
  • 仍然使用“铲”,但在每个exchange上定义一个新队列,并配置一个队列以对铲进行排队
对于电铲选项: 群集1上有exchange A,群集2上有exchange A, 每个集群上的主队列

  • 在每个群集上创建绑定到exchange a的辅助_队列
  • 创建从集群1上的辅助队列到集群2上的主队列的铲
  • 创建从集群2的辅助队列到集群1的主队列的铲
联合的好处:更简单,即使您配置了复杂的路由


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

您能提供更多关于您的用例的上下文吗?您选择电铲vs有什么原因吗?只是我们已经在使用电铲并且熟悉它。我对联邦不太熟悉,我来检查一下。本质上,我们在每个数据中心都有一只兔子,每个兔子都有一个制作人以相同的名字向exchange写入代码。然后,我们将队列绑定到这些交换,我们需要这些队列包含来自两个生产者的所有消息。所以我们需要双向复制,但需要避免复制已经复制的消息。嗨,奥利弗-谢谢你的回答。您的Solve解决方案看起来很有趣,但当我说队列绑定时,我指的是多个队列,因为有多个应用程序需要所有消息。但仔细想想,我想这可能是一次交换,之后会出现排队的情况。缺点是,它需要更改现有的生产者应用程序。我肯定会调查联合会,但担心信息可能丢失。仍然非常希望听到使用exchange标头匹配的解决方案。你熟悉这个吗?嗨@Tom,我是RabbitMQ的忠实用户,所以尽管我希望我的评论能对你有所帮助,但我远没有达到专家水平。考虑到这一点,我坚决建议调查联邦,因为从一些额外的阅读来看,它有可能容忍与某些参数的严重断开连接。关于头交换,我没有使用它们,尽管我知道它们的逻辑。最后,如果没有关于您的设置的更多细节,特别是您正在使用的交换机类型,就很难做出“好”的推荐,以及队列的数量。最终使用了一种第二级队列方法的变体,该方法引入了第二级交换,并创建了一个挂在上层交换上的队列,将其铲到另一个代理上的下层交换。