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

时间:2018-04-30 05:55:44

标签: rabbitmq failover spring-rabbit

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

但是,Spring AMQP也使用了一些引用 当代理恢复生机时,故障转移实现,如连接重置。

关于这个话题,我有几个问题(鉴于这些文章或多或少都是旧的,今天是2018年)

  • 使用Spring AMQP时,仍然需要进行负载均衡吗?

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

  • Spring AMQP是否支持某种拓扑感知,这可以让它从正确的节点中消耗?

  • 有些文章建议客户端应该发布/使用关于队列位置的节点。这仍然适用吗?在负载平衡,Spring AMQP故障转移和CachingConnectionFactory的情况下,这一切如何组合在一起?

有人可以提供这些主题的答案,并提供相关参考资料,以便提供额外的验证信息吗?

非常感谢

1 个答案:

答案 0 :(得分:3)

对于你的每一发子弹:

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

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

  • 请参阅Queue Affinity and the LocalizedQueueConnectionFactory。它使用管理插件来确定当前承载队列的节点并连接到该节点。 它不适用于负载均衡器,因为它需要连接到实际节点

  • 我从几个讨论中了解到,只有在最极端的环境中才需要队列亲和力,并且在大多数环境中,差异是无法估量的。但是,环境/网络差异很大,YMMV因此您可能想要测试。我的一般经验法则是避免过早优化,因为配置的额外复杂性可能根本不值得(并且您可能首先没有问题)。