跳到主要内容

惰性队列

RabbitMQ 从 3.6.0 版本开始引入了惰性队列的概念。正常消息是保存在内存中,惰性队列是将消息先保存在磁盘再加载在内存中进行消费,因此消费速度比队列的默认模式慢;

适用场景:

1、当消费者由于各种各样的原因(比如消费者下线、宕机亦或者是由于维护而关闭等)而致使长时间内不能消费消息造成堆积

2、消息产生速度远大于消费端,导致消息大量积压

设置方式:

可以通过调用 channel.queueDeclare 方法的时候在参数中设置,也可以通过 Policy 的方式设置,如果一个队列同时使用这两种方式设置的话,那么 Policy 的方式具备更高的优先级。

#设置惰性队列方式一:

Map<String, Object> args = new HashMap<String, Object>();

args.put("x-queue-mode", "lazy");

channel.queueDeclare("myqueue", false, false, false, args);

#设置惰性队列方式二(命令行版本):

rabbitmqctl set_policy Lazy "队列名" '{"queue-mode":"lazy"}' --apply-to queues

注意点:

如果惰性队列中存储的是非持久化的消息,内存的使用率会一直很稳定,但是重启之后消息一样会丢失,因此惰性队列需要和持久化消息一起使用