使用 Spring AMQP 和 RabbitMQ HA 进行故障转移

2023-12-29

有多篇文章建议在 RabbitMQ 集群前面使用负载均衡器。

然而,也有多个参考资料显示 Spring AMQP 正在使用一些 故障转移实现,例如代理恢复时连接重置。

我对这个主题有几个问题(考虑到这些文章或多或少是旧的,而且今天是 2018 年)

  • 使用Spring AMQP时,还需要负载均衡吗?

  • 如果仍然建议负载平衡,我将如何解决主队列与其节点的亲和力?集群节点之间会有很多互连,因为循环负载均衡器命中正确集群节点的成功率为 1-(1/n)

  • Spring AMQP 是否支持某种拓扑感知,这将允许它从正确的节点消费?

  • 有一些文章建议客户端应该发布/消费到尊重队列局部性的节点。这仍然适用吗?考虑到负载平衡、Spring AMQP 故障转移和 CachingConnectionFactory,这一切如何组合在一起?

任何人都可以提供这些主题的答案并提供相关参考资料,这将为验证提供更多信息吗?

多谢


对于每个项目符号:

  • 负载均衡器对于 Spring AMQP 的默认配置没有什么意义,因为它打开一个在所有消费者之间共享的单个、长期存在的连接。在2.0中,您可以配置RabbitTemplate使用单独的连接;这是因为建议配置为发布者/消费者使用不同的连接;这将是 2.1 中的默认值。

    • 如果您将连接工厂配置为缓存连接(而不仅仅是通道),那么使用负载均衡器可能是有意义的,因为每个组件都会获得自己的连接。
  • 请参阅下一个项目符号。

  • See 队列亲和性和本地化的 QueueConnectionFactory https://docs.spring.io/spring-amqp//reference/html/_reference.html#queue-affinity。它使用管理插件来确定当前托管队列的节点并连接到该节点。它不能与负载均衡器一起使用,因为它需要连接到实际节点.

  • 从几次讨论中我了解到,只有在最极端的环境中才需要队列亲和力,并且在大多数环境中,差异是不可估量的。然而,环境/网络差异很大,YMMV 所以你可能想测试一下。我的一般经验法则是避免过早优化,因为增加的配置复杂性可能根本不值得带来好处(而且您可能一开始就没有问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Spring AMQP 和 RabbitMQ HA 进行故障转移 的相关文章

随机推荐