介绍
消费者由于各种原因而致使长时间不能消费消息造成堆积。比如有一百万条消息发送到mq中,消费者这时宕机了不能消费消息,造成了消息堆积。惰性队列就有必要了。
正常情况下,消息保存在内存中。消费者从内存中读取消息消费,速度快。
惰性队列,消息保存在磁盘中,消费者从磁盘读取消息进行消费,速度慢。
配置惰性队列
在web管理控制台设置惰性队列
通过代码声明
Map<String, Object> arguments = new HashMap<>(); arguments.put("x-queue-mode", "lazy");//设置为惰性队列 channel.queueDeclare(QUEUE_NAME, true, false, false, arguments);
内存占用情况
例如发送一百万条消息,每条消息大概占1kb的情况下,普通队列占用内存是1.2GB,而惰性队列占1.5mb,其他消息内容存放在磁盘的,内存只会存放这些消息的索引。