使用 Spring AMQP 和 RabbitMQ HA 进行故障转移
Failover with Spring AMQP and RabbitMQ HA
有多篇文章建议在RabbitMQ集群前使用load-balancer
然而,也有多个参考资料表明 Spring AMQP 正在使用一些
故障转移实现,如代理恢复时连接重置。
关于这个话题我有几个问题(考虑到这些文章或多或少是旧的,而且今天是 2018 年)
当使用 Spring AMQP 时,是否仍然需要负载平衡?
如果仍然建议负载均衡,我将如何解决主队列与其节点的亲和性?集群节点之间会有很多互连,因为循环负载均衡器命中正确集群节点的成功率为 1-(1/n)
Spring AMQP 是否支持某种拓扑感知,这将允许它从正确的节点消费?
有一些文章建议客户端应该 publish/consume 到尊重队列局部性的节点。这仍然适用吗?在给定负载平衡、Spring AMQP 故障转移和 CachingConnectionFactory 的情况下,这一切如何组合在一起?
谁能提供这些主题的答案并提供相关参考资料,这将提供额外的信息以供验证?
非常感谢
你的每颗子弹:
负载均衡器对于 Spring AMQP 的默认配置没有多大意义,因为它打开一个在所有消费者之间共享的单一、长期连接。在 2.0 中,可以配置 RabbitTemplate
使用单独的连接;这是因为建议配置为 publishers/consumers 使用不同的连接;这将是 2.1 中的默认设置。
- 如果您将连接工厂配置为缓存连接(而不仅仅是通道),那么使用负载平衡器可能是有意义的,因为这样每个组件都会获得自己的连接。
查看下一个项目符号。
参见 Queue Affinity and the LocalizedQueueConnectionFactory。它使用管理插件来确定当前托管队列的节点并连接到该队列。 它不适用于负载均衡器,因为它需要连接到实际节点。
我从几次讨论中了解到,只有在最极端的环境中才需要队列亲和性,而在大多数环境中,差异是不可估量的。不过,environments/networks 相差这么多,YMMV 所以你可能要测试一下。我的一般经验法则是避免过早优化,因为增加的配置复杂性可能根本不值得从中受益(而且您可能一开始就没有问题)。
有多篇文章建议在RabbitMQ集群前使用load-balancer
然而,也有多个参考资料表明 Spring AMQP 正在使用一些 故障转移实现,如代理恢复时连接重置。
关于这个话题我有几个问题(考虑到这些文章或多或少是旧的,而且今天是 2018 年)
当使用 Spring AMQP 时,是否仍然需要负载平衡?
如果仍然建议负载均衡,我将如何解决主队列与其节点的亲和性?集群节点之间会有很多互连,因为循环负载均衡器命中正确集群节点的成功率为 1-(1/n)
Spring AMQP 是否支持某种拓扑感知,这将允许它从正确的节点消费?
有一些文章建议客户端应该 publish/consume 到尊重队列局部性的节点。这仍然适用吗?在给定负载平衡、Spring AMQP 故障转移和 CachingConnectionFactory 的情况下,这一切如何组合在一起?
谁能提供这些主题的答案并提供相关参考资料,这将提供额外的信息以供验证?
非常感谢
你的每颗子弹:
负载均衡器对于 Spring AMQP 的默认配置没有多大意义,因为它打开一个在所有消费者之间共享的单一、长期连接。在 2.0 中,可以配置
RabbitTemplate
使用单独的连接;这是因为建议配置为 publishers/consumers 使用不同的连接;这将是 2.1 中的默认设置。- 如果您将连接工厂配置为缓存连接(而不仅仅是通道),那么使用负载平衡器可能是有意义的,因为这样每个组件都会获得自己的连接。
查看下一个项目符号。
参见 Queue Affinity and the LocalizedQueueConnectionFactory。它使用管理插件来确定当前托管队列的节点并连接到该队列。 它不适用于负载均衡器,因为它需要连接到实际节点。
我从几次讨论中了解到,只有在最极端的环境中才需要队列亲和性,而在大多数环境中,差异是不可估量的。不过,environments/networks 相差这么多,YMMV 所以你可能要测试一下。我的一般经验法则是避免过早优化,因为增加的配置复杂性可能根本不值得从中受益(而且您可能一开始就没有问题)。