代码编织梦想

RabbitMQ—持久化

引言

  • 如何保障当 RabbitMQ 服务停掉以后消息生产者发送过来的消息不丢失?
  • 默认情况下 RabbitMQ 退出或由于某种原因崩溃时,它丢失队列和消息,除非告知它不要这样做。
  • 确保消息不会丢失需要做两件事:我们需要将队列消息都标记为持久化。

队列持久化

如何实现队列持久化?
在声明队列的时候把 durable 参数设置为true即可持久化
在这里插入图片描述
注意点:有相同名字的队列未持久化,需要将该相同名字的队列删除才能持久化
在这里插入图片描述
持久化之后,rabbitmq服务器重启,该队列依旧会存在

消息持久化

如何实现:在生产者发送消息的代码修改属性,将props参数设置为MessageProperties.PERSISTENT_TEXT_PLAIN,即可开启消息持久化
在这里插入图片描述
注意点:

  • 队列持久化必须开启,否则不会生效
  • 消息标记为持久化并不能完全保证不会丢失消息

消息的不公平分发

即能者多劳,假如有两个消费者,一个处理的快,一个处理的慢,那么采用轮询的话,处理的快的消费者就会去等待处理的慢的消费者,这个属于公平分发。而不公平分发,处理的快的不会去等待,而是继续处理下一个消息。

如何开启:在生产者中设置如下参数
在这里插入图片描述
意思就是如果这个消息我还没有处理完或者我还没有应答你,你先别分配给我,我目前只能处理一个任务,然后 rabbitmq 就会把该任务分配给没有那么忙的那个空闲消费者。
优点:提高工作线程的利用率
缺点:如果所有的消费者都没有完成手上任务,队列还在不停的添加新任务,队列有可能就会遇到队列被撑满的情况,这个时候就只能添加新的 worker 或者改变其他存储任务的策略。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44755735/article/details/118415221

6_rabbitmq消息应答与消息持久化_chenshiying007的博客-爱代码爱编程

6_rabbitmq消息应答与消息持久化 更多干货 分布式实战(干货)spring cloud 实战(干货)mybatis 实战(干货)spring boot 实战(干货)React 入门实战(干货)构建中小型互联网企业架构(干货)python 学习持续更新 例子代码地址 https://github.com/csy512889371/learndemo/

rabbitmq实战篇9-消息持久化_朱_哲的博客-爱代码爱编程

在前面的第七和第八节我们讲解了如何实现消息的发布和订阅。同时也提到了一些问题,比如说如果RabbitMQ服务挂掉了,那么我们的消息也就丢失了。怎么解决这样的问题呢?这就需要我们将消息进行持久化啦 这节,我们就在原有的基础上来讲解消息的持久化 如何持久化 其实,在之前我们已经将消息进行了持久化。只是我们并没有去关注。 简单说说消息发布订阅的流程: 生产者将消

python 操作rabbitmq详解_python 学习者的博客-爱代码爱编程_rabbitmq python

一、简介:   RabbitMq 是实现了高级消息队列协议(AMQP)的开源消息代理中间件。消息队列是一种应用程序对应用程序的通行方式,应用程序通过写消息,将消息传递于队列,由另一应用程序读取 完成通信。而作为中间件的 RabbitMq 无疑是目前最流行的消息队列之一。        RabbitMq 应用场景广泛: 系统的高可用:日常生活当中各种商

rabbitmq之消息持久化_weixin_34062329的博客-爱代码爱编程

消息的可靠性是RabbitMQ的一大特色,那么RabbitMQ是如何保证消息可靠性的呢——消息持久化。 为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化。 queue的持久化 queue的持久化是通过durable=true来实现的。 一般程

rabbitmq持久化_iiaythi的博客-爱代码爱编程_rabbitmq持久化

rabbitmq持久化 持久化是为提高rabbitmq消息的可靠性,防止在异常情况(重启,关闭,宕机)下数据的丢失 rabbitmq持久化分为三个部分: 交换器的持久化、队列的持久化和消息的持久化 交换器的持

rabbitmq持久化_来自流星的博客-爱代码爱编程

持久化:      持久化可以提高RabbitMQ的可靠性,可以防止在异常情况下(重启、关闭、宕机)的情况下数据丢失。    交换器持久化通过声明交换器时将参数durable参数设置为true,如果不设置持久化,那么RabbitMQ服务重启之后,相关的交换器元数据会丢失,不过消息不会丢失。   队列持久化通过声明交换器时将参数durable参数设置为tr

rabbitmq持久化消息设置_chuixieli7527的博客-爱代码爱编程

void basicPublish(String exchange, String routingKey, BasicProperties props, byte[] body) throws IOException; channel.basicPublish("exchange.persistent", "persistent", Messag

rabbitmq持久化-爱代码爱编程

       持久化可以提高Rabbitmq的可靠性,以防止在异常情况(重启、关闭、宕机等)下的数据丢失。Rabbitmq的持久化分为三个部分:交换机的持久化、队列的持久化和消息的持久化。        交换机的持久化是通过在声明队列是将durable参数置为true实现的。如果交换机不设置持久化,那么在RabbitMQ服务重启之后,相关的交换机元数据会

消息队列RabbitMQ之消息持久化-爱代码爱编程

文章目录 前置知识RabbitMQ消息持久化为什么需要消息持久化?怎么设置消息持久化?JavaAPI设置持久化属性 前置知识 什么是消息队列RabbitMQ?参考博客:消息队列RabbitMQ之初学者 什么是消息队列的消息模型?参考博客:消息队列RabbitMQ之五种消息模型 什么是消息队列的基本消息模型?参考博客:消息队列Rabbit

RabbitMQ消息持久化-爱代码爱编程

为了保证RabbitMQ在退出或者crash等异常情况下数据没有丢失,需要将queue,exchange和Message都持久化。   1、queue 队列的持久化   queue的持久化是通过durable=true来实现的。 一般程序中这么使用: Connection connection =

rabbitmq中持久化-爱代码爱编程

1、简介       持久化可以提高 RabbitMQ 的可靠性, 以防在异常情况(重启、关闭、宕机等)下的数据丢失 。RabbitMQ的持久化分为三个部分:交换器的持久化、队列的持久化和消息的持久化 。 2、交换器持久化       交换器的持久化是通过在声明交换器时将 durable 参数置为 true 实现的,如果交换器不设置持久化,那么在 R

rabbitMQ简单实现持久化的生产者消费者-爱代码爱编程

rabbitMQ简单实现持久化的生产者消费者 ## 简单实现rabbitMQ简单实现持久化的生产者消费者 前提需要先安装rabbitMq并启动在这里插入代码片 生产者代码 ```python import pika # 简单的向队列中加入消息 # 创建连接对象 connection = pika.BlockingConnection( pik

RabbitMq持久化-爱代码爱编程

持久化就是防止异常情况下的数据丢失,提高rabbitmq的可靠性。这里的异常主要说的就是重启,关闭,宕机等。根据我们近期学习的rabbitmq中有关消息的概念来说,消息要经过交换器、队列。因此我们的持久化就是针对交换器、队列和消息本身的。 1.交换器的持久化 对于经常使用的交换器来说,我们可以将交换器声明为durable参数为true,如果不声明

RabbitMq持久化及发布确认-爱代码爱编程

目录 持久化队列持久化消息持久化发布确认单个发布确认批量发布确认异步发布确认三种确认方式代码及确认时长对比 持久化 持久化和发布确认都是为了保证消息传输的可靠性以及将数据写在磁盘上。 队列持久化 只需要在生产者生成队列的时候把参数变成true即可。 //生成队列 Boolean durable = true; channel.queue