# 配置RabbitMQ惰性队列
默认情况下，RabbitMQ生产者生产的消息存储在内存中，当需要释放内存时，会将内存中的消息换页至磁盘中。换页操作会消耗较长的时间，且换页过程中队列无法处理消息。
如果生产速度过快（例如执行批处理任务），或者消费者由于各种原因（例如消费者下线、宕机）长时间内无法消费消息，导致消息大量堆积，使得内存使用率过高，换页频繁，可能会影响其他队列的消息收发。这种场景下，建议您启用惰性队列。
惰性队列（Lazy Queue）会尽可能的将消息存入磁盘中，在消费者消费到相应的消息时才会被加载到内存中，这样可以减少内存的消耗，但是会增加I/O的使用，影响单个队列的吞吐量。惰性队列的一个重要的设计目标是能够支持更长的队列，即支持更多的消息存储/消息堆积。
处于以下情况时，**推荐使用惰性队列**：
- 队列可能会产生消息堆积。
- 队列对性能（吞吐量）的要求不是非常高，例如TPS 1万以下的场景。
- 希望队列有稳定的生产消费性能，不受内存影响而波动。
处于以下情况时，**无需使用惰性队列**：
- RabbitMQ需要高性能的场景。
- 队列总是很短（即队列中没有消息堆积）。
- 设置了最大长度策略。
更多关于惰性队列的说明，请参考[Lazy Queues](https://www.rabbitmq.com/lazy-queues.html)。
#### 约束与限制
RabbitMQ 3.8.35及以上版本支持惰性队列。
#### 配置惰性队列
队列具备两种模式：default和lazy，默认模式为default，lazy模式即为惰性队列的模式。
**如果一个队列同时使用几种方式设置的话，Policy的方式具备更高的优先级。**
- **Java客户端** ：通过调用**channel.queueDeclare**方法的时候在参数中设置。
- **RabbitMQ WebUI**：通过Policy的方式设置。
- **RabbitMQ控制台**：创建队列时设置。
 
- [在Java客户端配置惰性队列]
  以下示例演示**在Java客户端通过调用channel.queueDeclare** 设置惰性队列**。**
  ```
  Map<String, Object> args = new HashMap<String, Object>();
  args.put("x-queue-mode", "lazy");
  channel.queueDeclare("myqueue", false, false, false, args);
  ```
- [在RabbitMQ WebUI配置惰性队列]
  1. 登录[RabbitMQ实例的Web UI](https://support.huaweicloud.com/usermanual-rabbitmq/rabbitmq-ug-180801003.html)。
  
  2. 在菜单栏，选择"Admin"。 
     图1选择Admin菜单   
     ![](https://support.huaweicloud.com/usermanual-rabbitmq/zh-cn_image_0000002334264598.png "点击放大")
     
     
  
  3. 在左侧导航栏选择"Policies"，进入"Policies"页面。
  
  4. 在"Add / update a policy"区域，参考[表1]，新增一个策略。
     
     图2新增一个策略   
     ![](https://support.huaweicloud.com/usermanual-rabbitmq/zh-cn_image_0000002368312273.png "点击放大")
      表1策略参数说明 
     | 参数           | 说明                            |
     |:---|:---|
     | Virtual Host | 设置策略所应用的Vhost。"/"表示默认Vhost。   |
     | Name          | 策略的名称，用户自定义。                 |
     | Pattern      | Queue的匹配模式（正则表达式）。          |
     | Apply to   | 策略所适用的目标。选择"Queues"。         |
     | Priority    | 策略的优先级，数字越大，优先级越高。           |
     | Definition   | 通过"**queue-mode=lazy**"，配置惰性队列。 |
        
     
     
  
  5. 单击"Add/update policy"。 
     策略添加成功后如下图所示。
     图3查看惰性队列策略   
     ![](https://support.huaweicloud.com/usermanual-rabbitmq/zh-cn_image_0000002368319565.png "点击放大")
     
     
   
- [在RabbitMQ控制台配置惰性队列]
  1. 参考[创建RabbitMQ Queue](https://support.huaweicloud.com/usermanual-rabbitmq/rabbitmq_ug_0029.html)创建队列，并勾选"惰性队列模式"，完成惰性队列的创建。
     
     图4创建惰性队列   
     ![](https://support.huaweicloud.com/usermanual-rabbitmq/zh-cn_image_0000002523772593.png "点击放大")
     
     
  
  2. 在Queue列表中，单击新创建的队列后的"查看详情"，进入"查看详情"页面。 
     当"惰性队列模式"显示"是"时，表示惰性队列创建成功。
     图5查看队列详情   
     ![](https://support.huaweicloud.com/usermanual-rabbitmq/zh-cn_image_0000002491653786.png "点击放大")
     
     
   
#### 相关文档
如果您希望通过API创建惰性Queue，请参考[创建Queue](https://support.huaweicloud.com/api-rabbitmq/CreateQueue.html)。
