惰性队列说明;

This commit is contained in:
bunny 2025-05-19 17:16:57 +08:00
parent 51172bd142
commit fed632f16e
2 changed files with 54 additions and 1 deletions

View File

@ -796,3 +796,56 @@ sequenceDiagram
## 惰性队列
> [!NOTE]
>
> 1. **性能权衡**:惰性队列的吞吐量可能低于普通队列(尤其是内存队列)
> 2. **磁盘I/O压力**会增加磁盘I/O操作需要考虑磁盘性能
> 3. **不适合低延迟场景**:由于涉及磁盘操作,不适合对延迟极其敏感的场景
- 在创建队列时,在`Durability:`可以有两种选择:
- Durable持久化队列消息持久化到硬盘上。
- Transient临时队列不做持久化操作broker重启后消息会丢失。
### 惰性队列的核心特点
1. **消息直接写入磁盘**:不像普通队列先将消息存入内存再刷盘
2. **按需加载到内存**:只有在消费者需要时才将消息加载到内存
3. **减少内存占用**:特别适合处理大量消息且消费速度较慢的场景
### 主要应用场景
#### 1. 大流量消息积压场景
- 当生产者速度远高于消费者速度时
- 传统队列可能导致内存溢出,而惰性队列能有效控制内存使用
#### 2. 长时间消息堆积
- 需要长时间存储大量消息(如日志、审计数据)
- 消息可能需要在队列中保留数小时甚至数天
#### 3. 高可用性要求场景
- 减少节点故障时的消息丢失风险(因为消息已持久化到磁盘)
- 配合镜像队列使用可提高系统可靠性
#### 4. 内存敏感环境
- 在内存资源有限的服务器上
- 需要处理大量消息但无法提供足够内存的情况
#### 5. 突发流量处理
- 能够吸收突发的大量消息而不影响系统稳定性
- 为消费者处理高峰流量提供缓冲时间
### 配置方式
可以通过以下方式声明惰性队列:
```java
// Java客户端示例
Map<String, Object> args = new HashMap<>();
args.put("x-queue-mode", "lazy");
channel.queueDeclare("myLazyQueue", true, false, false, args);
```

View File

@ -343,7 +343,7 @@ public void processMessage(String dataString, Message message, Channel channel)
<h2 class="text-center fw-bold mb-5">RabbitMQ架构概览</h2>
<div class="diagram-container">
<img alt="RabbitMQ架构图" class="img-fluid rounded"
src="https://www.rabbitmq.com/img/tutorials/intro/hello-world-example-routing.png">
src="https://www.rabbitmq.com/img/rabbitmq-logo-with-name.svg">
<div class="row mt-4">
<div class="col-md-3">
<div class="text-center p-3">