RabbitMQ系列(23)--RabbitMQ惰性队列

RabbitMQ的惰性队列自3.6.0版本引入,旨在处理大量消息存储,延迟将消息加载到内存直到消费者消费。这种机制在消费者长时间无法消费时尤其有用。相比普通队列,惰性队列在1百万条1KB消息时内存占用大幅降低(1.5MBvs1.2GB),但消费速度会变慢,因需从磁盘读取消息。队列模式可通过queueDeclare方法或Policy设置,优先级Policy更高。
摘要由CSDN通过智能技术生成

1、概念:RabbitMQ从 3.6.0版本开始引入了惰性队列的概念。惰性队列会尽可能的将消息存入磁盘中(持久化队列若想持久化消息还需要看消息设置了持久化没),而在消费者消费到相应的消息时才会被加载到内存中,它的一个重要的设计目标是能够支持更长的队列,即支持更多的消息存储。

2、使用场景:当消费者由于各种各样的原因(比如消费者下线、宕机亦或者是由于维护而关闭等)而致使长时间内不能消费消息造成堆积时,惰性队列就很有必要了。

3、惰性队列的两种模式

队列具备两种模式: default和lazy。默认的为default模式,在3.6.0之前的版本无需做任何变更,lazy模式即为惰性队列的模式,可以通过调用channel.queueDeclare方法的时候在参数中设置,也可以通过Policy的方式设置,如果一个队列同时使用这两种方式设置的话,那么Policy的方式具备更高的优先级。如果要通过声明的方式改变已有队列的模式的话,那么只能先删除队列,然后再重新声明一个新的。在队列声明的时候可以通过"x-queue-mode"参数来设置队列的模式,取值为"default"和"lazy"。

下面示例中演示了一个惰性队列的声明细节:

Map<String,Object> args = new HashMap<String, Object>();
args.put("x-queue-mode", "lazy");
channel.queueDeclare("myqueue", false, false, false, args);

4、内存开销对比
在发送1百万条消息,每条消息大概占1KB的情况下,普通队列占用内存是1.2GB,而惰性队列仅仅占用1.5MB,但惰性队列消费消息的速度比较慢,因为惰性队列需要先从磁盘读取消息到内存,然后才被消费,所以速度会慢点。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值