vault backup: 2026-06-03 10:30:42

This commit is contained in:
2026-06-03 10:30:42 +08:00
parent 2e207dc8fb
commit b5d9e44f0b
16 changed files with 661 additions and 507 deletions
+38 -37
View File
@@ -1,34 +1,41 @@
# 11. Consumer-Producer 桥接模式
> **一句话概括**:`Consumer` 结构体桥接 `TaskQueue` 和 `WorkerPool`,实现生产者与消费者的彻底解耦。
---
tags: [consumer-producer, bridge-pattern, decoupling, go, message-queue]
create time: 2026-06-03 10:50
---
## 架构总览
# 11. Consumer-Producer 桥接模式
## 概述
Consumer 结构体桥接 TaskQueue 和 WorkerPool,实现生产者与消费者的彻底解耦。
## 正文
### 架构总览
```mermaid
flowchart LR
subgraph Producer["生产者"]
A[Generate Handler]
subgraph Producer["Producer"]
A["Generate Handler"]
end
subgraph Queue["TaskQueue 接口"]
B((Memory\nQueue))
C((RabbitMQ\nQueue))
B[("Memory Queue")]
C[("RabbitMQ Queue")]
end
subgraph Bridge["Consumer 桥接层"]
D{{"Consumer\n(bridge)"}}
D{{"Consumer"}}
end
subgraph Pool["WorkerPool"]
E[Worker 1]
F[Worker 2]
G[Worker N]
E["Worker 1"]
F["Worker 2"]
G["Worker N"]
end
subgraph Pipeline["业务逻辑"]
H[Eino Pipeline]
H["Eino Pipeline"]
end
A -->|"Submit(msg)"| B
@@ -45,9 +52,7 @@ flowchart LR
style D fill:#f9a825,stroke:#333,color:#000
```
---
## 核心结构体
### 核心结构体
`Consumer` 是整个任务调度体系的**桥梁**,它只做一件事:从队列取消息,提交到协程池。
@@ -69,14 +74,14 @@ type Consumer struct {
---
## 工作流程
### 工作流程
### 启动消费循环
#### 启动消费循环
```mermaid
sequenceDiagram
participant Main as main.go
participant Consumer
participant Consumer as Consumer
participant Queue as TaskQueue
participant Pool as WorkerPool
participant Handler as RunFromTaskMessage
@@ -102,20 +107,20 @@ sequenceDiagram
---
## 解耦的三层设计
### 解耦的三层设计
```mermaid
flowchart TB
subgraph "第 1 层:消息源"
subgraph "消息源"
Q["TaskQueue 接口\n(Memory / RabbitMQ)"]
end
subgraph "第 2 层:桥接"
subgraph "桥接"
C["Consumer\n(只关心 消费→提交)"]
end
subgraph "第 3 层:执行引擎"
subgraph "执行引擎"
P["WorkerPool\n(只关心 并发控制)"]
end
subgraph "第 4 层:业务逻辑"
subgraph "业务逻辑"
H["TaskHandler 回调\n(RunFromTaskMessage)"]
end
@@ -133,7 +138,7 @@ flowchart TB
---
## Handler 层注入
### Handler 层注入
`Consumer` 不硬编码业务逻辑,而是通过 `TaskHandler` 函数签名由外部注入:
@@ -149,13 +154,13 @@ consumer := worker.NewConsumer(tq, pool, handler.RunFromTaskMessage)
---
## 信号处理与优雅关闭
### 信号处理与优雅关闭
```mermaid
sequenceDiagram
participant OS as 操作系统
participant OS as OS
participant Main as main.go
participant Consumer
participant Consumer as Consumer
participant Pool as WorkerPool
OS->>Main: SIGINT / SIGTERM
@@ -173,13 +178,9 @@ sequenceDiagram
2. **再关 WorkerPool** — 等待已提交的任务执行完毕(最多 30 秒)
3. **最后关闭队列连接** — 释放 RabbitMQ / 内存资源
---
## 关联文档
| 文档 | 关系 |
|------|------|
| [03 - 任务队列](03-task-queue.md) | Consumer 的消息来源 |
| [02 - 协程池](02-worker-pool.md) | Consumer 的执行引擎 |
| [12 - 三级降级策略](12-three-tier-fallback.md) | Consumer 不参与降级,降级在 Handler 层 |
| [00 - 索引](00-index.md) | 返回文档总览 |
- [[03-任务队列]] — Consumer 的消息来源
- [[02-协程池]] — Consumer 的执行引擎
- [[12-三级降级策略]] — Consumer 不参与降级,降级在 Handler 层
- [[00-索引]] — 返回文档总览