当前位置: 首页 > news >正文

RabbitMQ:MQ的可靠性

MQ的可靠性

在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟。这样会导致两个问题:

  • 一旦MQ宕机,内存中的消息会丢失

  • 内存空间有限,当消费者故障或处理过慢时,会导致消息积压,引发MQ阻塞。
    在这里插入图片描述
    数据持久化
    RabbitMQ实现数据持久化包括3个方面:

  • 交换机持久化
    在这里插入图片描述

  • 队列持久化

  • 在这里插入图片描述

  • 消息持久化
    在这里插入图片描述
    Lazy Queue
    从RabbitMQ的3.6.0版本开始,就增加了LazyQueue的概念,也就是惰性队列。惰性队列的特征如下:

  • 接收到消息后直接存入磁盘,不再存储到内存

  • 消费者要消费消息时才会从磁盘中读取并加载到内存(可以提前缓存部分消息到内存,最多2048条)

  • 在3.12版本后,所有队列都是Lazy Queue式,无法更改。
    在这里插入图片描述
    代码方式

要设置一个队列为惰性队列,只需要在声明队列时,指定x-queue-mode属性为lazy即可:
@Bean
public Queue lazyQueue(){return QueueBuilder.durable("lazy.queue").lazy().build();
}
==================注解方式=============================================
@RabbitListener(queuesToDeclare = @Queue(name="lazy.queue",durable ="true",arguments = @Argument(name="x-queue-mode",value="lazy")
))
public void listenLazyQueue(String msg){log.info("接收到lazy.queue的消息:{}",msg);
}

RabbitMQ如何保证消息的可靠性

  • 首先通过配置可以让交换机、队列、以及发送的消息都持久化。这样队列中的消息会持久化到磁盘,MO重启消息依然存在。
  • RabbitMO在3.6版本引入了LazyQueue,并且在3.12版本后会称为队列的默认模式。LazyQueue会将所有消息都持久化。
  • 开启持久化和生产者确认时,RabbitM0只有在消息持久化完成后才会给生产者返回ACK回执

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C#实现数据采集系统-系统优化服务封装
  • 捷行推出2024年8月专属福利活动
  • TDS传感器 - 从零开始认识各种传感器【二十五期】
  • websocket实现简易聊天室
  • Python连接数据库:JDBC不是唯一选择!
  • 什么是接口?
  • 【Pytorch实用教程】PyTorch中的Tensor拼接与组合以及其意义
  • nginx负载均衡、java、tomcat装包
  • 【代码随想录_Day32】 62.不同路径 63. 不同路径 II
  • Python习题 102:计算两个日期之间的天数
  • 物联网协议篇(1):modbus tcp和modbusRTU的区别是什么?
  • 改进:利用哈希表加密密码管理系统中的密码,改进密码管理系统
  • 软件技术(游戏软件开发方向)实训室解决方案
  • SQLite库笔记:命令行shell
  • JavaScript基础——JavaScript调用的三种方式
  • 《剑指offer》分解让复杂问题更简单
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Bytom交易说明(账户管理模式)
  • Consul Config 使用Git做版本控制的实现
  • input实现文字超出省略号功能
  • Java|序列化异常StreamCorruptedException的解决方法
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Objective-C 中关联引用的概念
  • React系列之 Redux 架构模式
  • Vue.js 移动端适配之 vw 解决方案
  • Vue全家桶实现一个Web App
  • 订阅Forge Viewer所有的事件
  • 前端性能优化——回流与重绘
  • 如何学习JavaEE,项目又该如何做?
  • 如何用vue打造一个移动端音乐播放器
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 系统认识JavaScript正则表达式
  • 自定义函数
  • 最简单的无缝轮播
  • elasticsearch-head插件安装
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #AngularJS#$sce.trustAsResourceUrl
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (八)Flink Join 连接
  • (第27天)Oracle 数据泵转换分区表
  • (分布式缓存)Redis哨兵
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (十三)Flask之特殊装饰器详解
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转) ns2/nam与nam实现相关的文件
  • .bat批处理(二):%0 %1——给批处理脚本传递参数
  • .gitignore文件---让git自动忽略指定文件
  • .net core + vue 搭建前后端分离的框架
  • .Net Core webapi RestFul 统一接口数据返回格式