rabbitmq的持久化

目录

队列实现持久化

如何删除队列​编辑

消息实现持久化

不公平分发


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

队列实现持久化

之前我们创建的队列都是非持久化的,rabbitmq 如果重启的化,该队列就会被删除掉,如果
要队列实现持久化 需要在声明队列的时候把 durable 参数设置为持久化

java 复制代码
 boolean durable=true;
 channel.queueDeclare(QUEUE_NAME,durable,false,false,null);
 String message="hello world!!!!";

但是需要注意的就是如果之前声明的队列不是持久化的,需要把原先队列先删除,或者重新
创建一个持久化的队列,不然就会出现错误:but current is 'fakse'

如何删除队列

拉到最底下,点击删除。

持久化队列的标识

消息实现持久化

要想让消息实现持久化需在消息生产者修改代, MessageProperties.PERSISTENT_TEXT_PLAIN 添加这个属性。

java 复制代码
 channel.basicPublish("",QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());

不公平分发

我们学习到 RabbitMQ 分发消息采用的轮训分发,但是在某种场景下这种策略并不是很好,比方说有两个消费者在处理任务,其中有个消费者 1 处理任务的速度非常快,而另外一个消费者 2 处理速度却很慢,这个时候我们还是采用轮训分发的话就会到这处理速度快的这个消费者很大一部分时间 处于空闲状态,而处理慢的那个消费者一直在干活,这种分配方式在这种情况下其实就不太好,但是 RabbitMQ 并不知道这种情况它依然很公平的进行分发。

java 复制代码
int prefetchCount=1;
channel.basicQos(prefetchCount);

预取值

本身消息的发送就是异步发送的,所以在任何时候, channel 上肯定不止只有一个消息另外来自消费者的手动确认本质上也是异步的。因此这里就存在一个未确认的消息缓冲区,因此希望开发人员能限制此 缓冲区的大小,以避免缓冲区里面无限制的未确认消息问题 。这个时候就可以通过使用 basic.qos 方法设置"预取计数"值来完成的。该值定义通道上允许的未确认消息的最大数量 。一旦数量达到配置的数量,RabbitMQ 将停止在通道上传递更多消息,除非至少有一个未处理的消息被确认,例如,假设在通道上有未确认的消息 5 、 6 、 7 , 8 ,并且通道的预取计数设置为 4 ,此时 RabbitMQ 将不会在该通道上再传递任何消息,除非至少有一个未应答的消息被 ack 。比方说 tag=6 这个消息刚刚被确认 ACK , RabbitMQ 将会感知这个情况到并再发送一条消息。消息应答和 QoS 预取值对用户吞吐量有重大影响。通常,增加预取将提高向消费者传递消息的速度。

相关推荐
叶总没有会11 小时前
RabbitMQ高级
分布式·rabbitmq
ABB自动化14 小时前
ABB 500CIM06 (1MRB150077R0111) | REB500 通信接口
大数据·分布式·系统架构·系统安全·模块测试·plc 控制器
ZENERGY-众壹15 小时前
告别本地工控机:分布式光伏 SCADA 架构如何实现云边协同
分布式·架构·光伏运维·能源数字化·电站监控
code_slave(码畜)15 小时前
微服务架构落地:读写分离架构 —— 主从延迟引发的“刚开单查不到”灾难与破局
spring boot·分布式·spring cloud·微服务·云原生·架构·读写分离
JAVA_AI人工智能项目实战16 小时前
分布式大模型训练_学习笔记
人工智能·分布式·语言模型·自然语言处理
星夜孤帆17 小时前
Redis缓存击穿与分布式锁实战:专栏目录、源码与实验说明
redis·分布式·缓存
yyk3332418 小时前
Spark介绍
大数据·分布式·spark
成为你的宁宁18 小时前
【基于 SSH 与 JNLP 协议的 Jenkins 分布式构建方案】
分布式·jenkins
PingCAP1 天前
善战者无赫赫之功:消费金融核心系统的数据库选型与升级路径
数据库·分布式·架构
库库的数据库笔记1 天前
金融核心交易系统的数据库国产信创改造该如何做?
大数据·数据库·分布式·mysql·oracle·金融·数据库架构