栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

RabbitMQ的不公平分配和持久化

RabbitMQ的不公平分配和持久化

1、RabbitMQ的不公平分配

RabbitMQ默认采用的是轮循分发,但实际项目中可能某一个消费者处理的速度快,某一个处理的速度慢,
这个时候用轮循分发就会导致速度快的很长一段时间处于空闲状态,处理慢的就一直在干活。
为了避免上述情况:

 //消费者端开启不公平分配 
 channel.basicQos(1);

开启之后,意思就是说,我这一个消息还没有处理完或者说我还没有应答你,请你先不要分配消息给我;
这时候只能把新的消息分发给其它空闲的消费者。
1.1、预期值概念

RabbitMQ本身消息就是异步发送的, channel肯定不止只有一个消息;
另外消费者的确认本身也是异步的,因此就必须存在一个未确认的消息缓冲区,
开发人员就可以设置值,来限定此缓冲区的大小,避免无限制的未确认的消息的问题。

 //消费者端设置未确认消息缓存区
channel.basicQos(5);

2、RabbitMQ的持久化

RabbitMQ通过消息持久化来保障了消息可靠性,在异常退出或者宕机情况下,保障了数据的没有丢失。

2.1、队列持久化

如果没有设置队列持久化,如果RabbitMQ重启之后,该队列就会自动删除;

如何设置呢?
需要在声明队列的时候把 durable 参数设置为持久化
 
  boolean durable =true;
  channel.queueDeclare(QUEUE_NAME,durable,false,false,null);

如果之前声明的队列没有持久化,需要把原先的队列删除之后在创建,否则会报错。

2.2、消息持久化

只需在发消息的时候,添加

  
channel.basicPublish("",QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,
message.getBytes(StandardCharsets.UTF_8));

消息持久化并不能完全保证消息不丢失,因为尽管告诉了RabbitMQ将消息存入磁盘,但是消息存入磁盘的过程还有一个缓存点,可能出现意外。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/742819.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号