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

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

RabbitMQ

一、RabbitMQ 普通集群模式

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

二、镜像集群模式

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

  • 优点
    1. 能够极大地保证可用性
  • 缺点
    1. 性能开销太大
    2. 没有扩展性
  • 解决办法
    在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候可以要求数据同步到所有节点,也可以要求同步到指定数量的节点,然后你再次创建queue 的时候,应用这个策略,就会自动将数据同步到其他节点上去。
相关推荐
鲨鱼辣钊11 小时前
【FastAPI筑基-Day19】APScheduler定时任务全实战|自动执行、动态启停、后台常驻
java·spring·fastapi
不正经学生12 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技12 小时前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风15 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
学长毕业设计15 小时前
基于SpringBoot的公益基金管理系统(源码+文档+讲解视频)
java·spring boot·后端
Brilliantwxx15 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
东小西15 小时前
【SAA实战】第 3 篇 · 工具调用全攻略:把业务能力交给 Agent 自己调度
java·后端·spring
东小西15 小时前
【SAA实战】第 4 篇 · Agent 短期记忆:saver 让 Agent 跨轮记得住(threadId 隔离)
java·后端·spring
许彰午15 小时前
22-DataCenter报文序列化
java·低代码·架构·状态模式
2601_9620652515 小时前
[MySQL] SQL优化之性能分析
java·sql·mysql