惰性队列
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
注意点:
如果惰性队列中存储的是非持久化的消息,内存的使用率会一直很稳定,但是重启之后消息一样会丢失,因此惰性队列需要和持久化消息一起使用