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

标签 rabbitmq failover spring-rabbit

多篇文章建议在RabbitMQ集群前使用load-balancer。

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

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

  • 使用 Spring AMQP 时,是否仍然需要负载平衡?
  • 如果仍然建议负载平衡,我将如何解决主队列与其节点的关联?集群节点之间会有很多互连,因为循环负载均衡器命中正确集群节点的成功率为 1-(1/n)
  • Spring AMQP 是否支持某种拓扑感知,这将允许它从正确的节点消费?
  • 有一些文章建议客户端应该向尊重队列局部性的节点发布/消费。这仍然适用吗?考虑到负载平衡、Spring AMQP 故障转移和 CachingConnectionFactory,这一切如何组合在一起?

  • 任何人都可以提供这些主题的答案并提供相关引用资料,这些引用资料将为验证提供额外的信息吗?

    非常感谢

    最佳答案

    对于你的每一个子弹:

  • 负载均衡器对 Spring AMQP 的默认配置没有多大意义,因为它打开了一个在所有消费者之间共享的单一、长期存在的连接。在 2.0 中,您可以配置 RabbitTemplate使用单独的连接;这是因为推荐的配置是为发布者/消费者使用不同的连接;这将是 2.1 中的默认值。
  • 如果您将连接工厂配置为缓存连接(而不仅仅是 channel ),那么使用负载平衡器可能是有意义的,因为这样每个组件都会获得自己的连接。
  • 见下一个项目符号。
  • Queue Affinity and the LocalizedQueueConnectionFactory .它使用管理插件来确定当前托管队列的节点并连接到该节点。 它不适用于负载均衡器,因为它需要连接到实际节点 .
  • 我从几次讨论中了解到,只有在最极端的环境中才需要队列关联,而在大多数环境中,差异是不可估量的。但是,环境/网络差异很大,YMMV 所以你可能想要测试。我的一般经验法则是避免过早优化,因为增加的配置复杂性可能根本不值得从中受益(而且您可能一开始就没有问题)。
  • 关于rabbitmq - 使用 Spring AMQP 和 RabbitMQ HA 进行故障转移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50094705/

    相关文章:

    go - 无法使用 msg := rang msgs (msgs is a channel) 阻止 rabbitmq msg

    replication - Cassandra 故障转移与其他数据库相比?

    java - pythonrabbitmqadmin listqueues命令虽然存在消息但无法获取消息内容

    java - RabbitMQ 使用 Spring 直接回复的问题

    spring-boot - Spring rabbit 重试传递被拒绝的消息..可以吗?

    python - 用于异步任务的 celery 任务注册表

    ruby - rabbitmq 在服务器重启后删除队列绑定(bind)

    kubernetes - k8s、RabbitMQ 和对等发现

    c# - 关于如何制作应用程序的建议/代码示例 "Cluster Aware"

    java - Apache 、汤姆猫 : Loadbalancing and failover configuration showing blank page.