如何配置RabbitMQ双向铲,避免死循环?
How to configure RabbitMQ bidirectional shovel and avoid infinite loop?
我在不同的数据中心有 2 个 RabbitMQ 集群。目前我们正在将一只兔子的交换铲到另一只兔子,但现在我们也需要朝另一个方向铲。我们如何才能在不导致无限循环的情况下实现这一目标?
一位同事认为我们可以勾选 "Add Forwarding Headers" 选项,然后使用 Header 交换进行过滤。但是,添加的 headers 似乎是嵌套的,我还没有找到匹配 headers?
的方法
根据您提供的附加说明看来:
- 您正在交易所之间使用铲子
- 猜测交换类型是fanout
我可以看到两种方法来处理您要执行的操作:
- 使用federation,在每个集群的交换机之间双向配置
- 仍然使用shovel,但是在每个exchange上定义一个新的queue,并配置一个queue到queue shovel
对于铲子选项:
您在集群 1 上有交换 A,在集群 2 上有交换 A,
你的 main_queue 在每个集群上
- 在每个集群上创建一个secondary_queue,绑定交换A。
- 从集群 1 上的辅助队列到集群 2 上的 main_queue 创建一个铲子
- 从集群 2 上的辅助队列到集群 1 上的 main_queue 创建一个铲子
联合的好处:更简单,即使您配置了复杂的路由
铲子的好处:如果你有主要连接中断的风险(我会说超过一分钟),那就更好了。在这种情况下,您不会丢失消息,而在联合情况下可能会发生某些消息未在两个集群上复制的情况。
我在不同的数据中心有 2 个 RabbitMQ 集群。目前我们正在将一只兔子的交换铲到另一只兔子,但现在我们也需要朝另一个方向铲。我们如何才能在不导致无限循环的情况下实现这一目标?
一位同事认为我们可以勾选 "Add Forwarding Headers" 选项,然后使用 Header 交换进行过滤。但是,添加的 headers 似乎是嵌套的,我还没有找到匹配 headers?
的方法根据您提供的附加说明看来:
- 您正在交易所之间使用铲子
- 猜测交换类型是fanout
我可以看到两种方法来处理您要执行的操作:
- 使用federation,在每个集群的交换机之间双向配置
- 仍然使用shovel,但是在每个exchange上定义一个新的queue,并配置一个queue到queue shovel
对于铲子选项: 您在集群 1 上有交换 A,在集群 2 上有交换 A, 你的 main_queue 在每个集群上
- 在每个集群上创建一个secondary_queue,绑定交换A。
- 从集群 1 上的辅助队列到集群 2 上的 main_queue 创建一个铲子
- 从集群 2 上的辅助队列到集群 1 上的 main_queue 创建一个铲子
联合的好处:更简单,即使您配置了复杂的路由
铲子的好处:如果你有主要连接中断的风险(我会说超过一分钟),那就更好了。在这种情况下,您不会丢失消息,而在联合情况下可能会发生某些消息未在两个集群上复制的情况。