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

RabbitMQ 持久化

交换机持久化

交换器的持久化是通过在声明交换机时是将durable参数置为true实现的.相当于将交换机的属性在服务器内部保存,当MQ的服务器发生意外或关闭之后,重启RabbitMQ时不需要重新去建立交换机,交换机会自动建立,相当于一直存在。

如果交换器不设置持久化,那么在RabbitMQ服务重启之后,相关的交换机元数据会丢失,对一个长期使用的交换器来说,建议将其置为持久化的.

    //声明交换机@Bean("durableExchange")public Exchange durableExchange() {return ExchangeBuilder.directExchange(MQConstants.DURABLE_EXCHANGE).durable(true).build();}//声明交换机@Bean("durableExchange2")public Exchange durableExchange2() {return ExchangeBuilder.directExchange(MQConstants.DURABLE_EXCHANGE).durable(false).build();}

通过durable 赋值 true(持久化), false (非持久化) 来设置

队列持久化

如果队列不设置持久化,那么在RabbitMQ服务重启之后,该队列就会被删掉,此时数据也会丢失.(队列没有了,消息也无处可存了)

队列的持久化能保证该队列本身的元数据不会因异常情况而丢失,但是并不能保证内部所存储的消息不会丢失,要确保消息不会丢失,需要将消息设置为持久化.

    //声明队列@Bean("durableQueue1")public Queue durableQueue() {return QueueBuilder.durable(MQConstants.DURABLE_QUEUE).build();}@Bean("durableQueue2")public Queue durableQueue2() {return QueueBuilder.nonDurable(MQConstants.DURABLE_QUEUE).build();}

通过 durable() 设置队列的持久性,nonDurable() 就是设置不持久化的队列

消息持久化

消息的持久化就是当rabbitmq 服务器发生崩溃的时候,在重启之后依旧能看到我们发送过的消息,这就是消息的持久化,消息持久化的前提是队列的持久化,如果队列不持久化,只是设置消息的持久化是没有任何作用的,因为承载消息的容器【队列】都消失了,那消息也会跟着消失

首先确保队列持久化:

    //声明队列@Bean("durableQueue1")public Queue durableQueue() {return QueueBuilder.durable(MQConstants.DURABLE_QUEUE).build();}

设置消息的持久化:
在这里插入图片描述

NON_PERSISTENT 是非持久化,PERSISTENT是持久化

如果我们需要设置消息的持久化就需要设置PERSISTENT

通过给消息的属性赋值messageObject.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);

    @RequestMapping("/durable")public String durable() {for (int i = 0; i < 10; i++) {String message = "durable: " + i;Message messageObject = new Message(message.getBytes(), new MessageProperties());//设置发送的消息为持久化messageObject.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);rabbitTemplate.convertAndSend(MQConstants.DURABLE_EXCHANGE, MQConstants.DURABLE_ROUTING_KEY, messageObject);}return "消息发送成功";}

注意:
**消息的持久化是需要通过 rabbitmq 调用linux 内核将消息落入磁盘中实现的,因此消息的持久化会降低我们的rabbitmq 的性能,**如果不要求消息的持久化的场景中,我们尽量不要设置消息的持久化,虽然不是每条消息一到队列就进行持久化,而是使用批量持久化,当消息达到一定数量的时候,我们才进行落盘操作,但还是会降低性能


文章转载自:

http://5SQlbOsM.pdgqf.cn
http://q1W5bPDW.pdgqf.cn
http://qNxx3qYs.pdgqf.cn
http://fM7eORpq.pdgqf.cn
http://a9gCvA29.pdgqf.cn
http://zLzl0dXY.pdgqf.cn
http://KppaYXef.pdgqf.cn
http://6OVmixd7.pdgqf.cn
http://uArkRgUc.pdgqf.cn
http://rRCe1RrX.pdgqf.cn
http://swz9Fz9a.pdgqf.cn
http://ts7J0vXc.pdgqf.cn
http://P0Jo8Yp1.pdgqf.cn
http://LBhK25k7.pdgqf.cn
http://UE9qb1zV.pdgqf.cn
http://dwXqfY8U.pdgqf.cn
http://4snRdKJT.pdgqf.cn
http://R0SoCBW6.pdgqf.cn
http://o9SdvzWS.pdgqf.cn
http://ZPT0lwz3.pdgqf.cn
http://i9IEESOc.pdgqf.cn
http://Yi0W5wg2.pdgqf.cn
http://WjuQCMxH.pdgqf.cn
http://BPZLDUAw.pdgqf.cn
http://cQl6RZ2L.pdgqf.cn
http://BxCYIXrC.pdgqf.cn
http://DaIfQbBl.pdgqf.cn
http://InnXHZyF.pdgqf.cn
http://xdB9xlAj.pdgqf.cn
http://mRooehtn.pdgqf.cn
http://www.dtcms.com/a/372025.html

相关文章:

  • matrix-breakout-2-morpheus靶机渗透
  • 学习结构体
  • Docker 容器 OOM:从资源监控到JVM调优的实战记录
  • TypeORM、Sequelize、Hibernate 的优缺点对比:新手常见 SQL 与 ORM 踩坑总结
  • 企业级低代码平台的条件函数系统设计:从复杂到极简的架构演进
  • ICCV-2025 | 中科院自动化所世界模型助力具身导航!NavMorph:连续环境中的视觉语言导航自演化世界模型
  • ChatGPT 协作排查:Node.js 内存泄漏的定位与修复
  • Cannot resolve plugin org.apache.maven.plugins:maven-site-plugin:3.1.0
  • 备战 2025 软考系统架构师
  • RabbitMQ 重试机制 和 TTL
  • 人工智能竞赛提高mAP的方法
  • 深度学习——残差神经网络案例
  • LeetCode 刷题【68. 文本左右对齐】
  • Day23_【机器学习—集成学习(5)—Boosting—XGBoost算法】
  • 基于飞算JavaAI的在线图书借阅平台设计与实现(深度实践版)
  • fps:AI系统
  • 强化学习入门:从零开始实现Dueling DQN
  • 做事总是三分钟热度怎么办
  • 图像形态学
  • C++运算符重载——函数调用运算符 ()
  • 分布式系统——分布式数据库的高扩展性保证
  • C++ 并发编程:异步任务
  • 四、神经网络的学习(中)
  • OPENPPP2 —— IP标准校验和算法深度剖析:从原理到SSE2优化实现
  • 梅花易数:从入门到精通
  • 计算机⽹络及TCP⽹络应⽤程序开发
  • 单点登录1(SSO知识点)
  • 嵌入式学习---(ARM)
  • 嵌入式学习day44-硬件—ARM体系架构
  • 《数据结构全解析:栈(数组实现)》