【退役之重学Java】如何保证消息队列的高可用?

通过上一篇博客,我们知道,虽然引入消息队列可以优化系统的性能、稳定性和可维护性,提升系统的整体效率和用户体验。但是也需要注意其可能带来的复杂性、一致性、可用性、延迟、数据一致性等方面的缺点。

RabbitMQ

一、RabbitMQ 普通集群模式

  • 缺点
    1. 在 RabbitMQ 集群内部产生大量的数据传输
    2. 不能保障可用性,如果 queue 所在的节点宕机了,就导致哪个 queue 的数据丢失

二、镜像集群模式

这是 RabbitMQ 的高可用模式,跟不同集群模式不一样的是,你创建的 queue, 无论元数据还是 queue 里的消息都会存在于多个实例上,然后每次你写消息到 queue 的时候,都会自动把消息放到多个实例的 queue 里进行消息同步。

  • 优点
    1. 能够极大地保证可用性
  • 缺点
    1. 性能开销太大
    2. 没有扩展性
  • 解决办法
    在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候可以要求数据同步到所有节点,也可以要求同步到指定数量的节点,然后你再次创建queue 的时候,应用这个策略,就会自动将数据同步到其他节点上去。
相关推荐
niucloud-admin17 分钟前
NIUCLOUD PHP SAAS上门家政使用文档:城市管理
java·前端·php
专注仿真25 分钟前
线性回归和逻辑回归算法详解
开发语言·人工智能·python·大模型训练·控制算法
霸道流氓气质43 分钟前
智能客服组件:分层意图识别、RAG Advisor 与人工转接状态机的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
jimy11 小时前
C++ 中的 `T&&`:右值引用与转发引用
开发语言·c++
captain3761 小时前
MyBatis操作数据库(入门2)
java·数据库·spring boot·后端·spring·mybatis
呆呆虫121 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项
开发语言·php
心中有你02142 小时前
Java实现Dijkstra最短路径算法(邻接表 + 优先队列)
java·数据库·算法
心疼你的一切2 小时前
Python自动发邮件实战定时发报表
大数据·开发语言·python
步行cgn2 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
lgcgkCQ3 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j