✨ 惰性队列说明;
This commit is contained in:
parent
51172bd142
commit
fed632f16e
|
@ -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);
|
||||
```
|
|
@ -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">
|
||||
|
|
Loading…
Reference in New Issue