From fed632f16e57f72817428bfbe6877c758db43e75 Mon Sep 17 00:00:00 2001 From: bunny <1319900154@qq.com> Date: Mon, 19 May 2025 17:16:57 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=83=B0=E6=80=A7=E9=98=9F?= =?UTF-8?q?=E5=88=97=E8=AF=B4=E6=98=8E;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mq-demo/ReadMe.md | 53 +++++++++++++++++++ .../src/main/resources/templates/index.html | 2 +- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/mq-demo/ReadMe.md b/mq-demo/ReadMe.md index 455e81d..fa85bfc 100644 --- a/mq-demo/ReadMe.md +++ b/mq-demo/ReadMe.md @@ -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 args = new HashMap<>(); +args.put("x-queue-mode", "lazy"); +channel.queueDeclare("myLazyQueue", true, false, false, args); +``` \ No newline at end of file diff --git a/mq-demo/src/main/resources/templates/index.html b/mq-demo/src/main/resources/templates/index.html index a81542e..74acf2b 100644 --- a/mq-demo/src/main/resources/templates/index.html +++ b/mq-demo/src/main/resources/templates/index.html @@ -343,7 +343,7 @@ public void processMessage(String dataString, Message message, Channel channel)

RabbitMQ架构概览

RabbitMQ架构图 + src="https://www.rabbitmq.com/img/rabbitmq-logo-with-name.svg">