vault backup: 2026-06-03 10:30:42
This commit is contained in:
@@ -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-索引]] — 返回文档总览
|
||||
|
||||
Reference in New Issue
Block a user