update
This commit is contained in:
+43
-43
@@ -2,11 +2,11 @@
|
||||
|
||||
## 概述
|
||||
|
||||
本文档描述 dataflow 应用的 RabbitMQ 消息队列架构设计和配置方法。
|
||||
本文档描述 datahub 应用的 RabbitMQ 消息队列架构设计和配置方法。
|
||||
|
||||
### 业务背景
|
||||
|
||||
- **应用角色**:dataflow 是消息消费者,负责接收来自多个电商平台的数据并入库
|
||||
- **应用角色**:datahub 是消息消费者,负责接收来自多个电商平台的数据并入库
|
||||
- **数据来源**:多个电商平台(DouYin、JD、Tmall、RedBook、Amazon Japan、Naver、Rakuten、Shopify 等)
|
||||
- **数据类型**:订单(orders)、产品(products)、退款(refunds)、库存(inventory)
|
||||
- **隔离需求**:不同平台开发者之间的工作空间需要相互隔离,互不影响
|
||||
@@ -214,19 +214,19 @@ VHost 按业务应用进行划分,便于资源隔离和权限管理。
|
||||
|
||||
```
|
||||
RabbitMQ 实例
|
||||
├── dataflow-app # Dataflow 应用专用
|
||||
├── datahub-app # Datahub 应用专用
|
||||
├── analytics-app # 分析应用(预留)
|
||||
└── warehouse-app # 数据仓库应用(预留)
|
||||
```
|
||||
|
||||
**当前需要创建的 VHost**:
|
||||
- `dataflow-app`:用于电商数据流转
|
||||
- `datahub-app`:用于电商数据流转
|
||||
|
||||
---
|
||||
|
||||
### 2. Exchange 设计
|
||||
|
||||
在 `dataflow-app` VHost 中,Exchange 分为两类:
|
||||
在 `datahub-app` VHost 中,Exchange 分为两类:
|
||||
|
||||
#### 业务 Exchange(用于数据投递)
|
||||
|
||||
@@ -702,7 +702,7 @@ class OrderConsumer:
|
||||
```
|
||||
用户名: user_douyin
|
||||
密码: <安全密码>
|
||||
VHost: dataflow-app
|
||||
VHost: datahub-app
|
||||
|
||||
权限配置:
|
||||
- Configure: (留空) - 不允许创建/删除资源
|
||||
@@ -715,7 +715,7 @@ VHost: dataflow-app
|
||||
```
|
||||
用户名: user_tmall
|
||||
密码: <安全密码>
|
||||
VHost: dataflow-app
|
||||
VHost: datahub-app
|
||||
|
||||
权限配置:
|
||||
- Configure: (留空)
|
||||
@@ -733,14 +733,14 @@ VHost: dataflow-app
|
||||
- Rakuten: `user_rakuten`
|
||||
- Shopify: `user_shopify`
|
||||
|
||||
### 2. Dataflow 消费者账号
|
||||
### 2. Datahub 消费者账号
|
||||
|
||||
Dataflow 应用的后端服务账号,负责消费业务队列并处理错误。
|
||||
Datahub 应用的后端服务账号,负责消费业务队列并处理错误。
|
||||
|
||||
```
|
||||
用户名: user_dataflow_consumer
|
||||
用户名: user_datahub_consumer
|
||||
密码: <安全密码>
|
||||
VHost: dataflow-app
|
||||
VHost: datahub-app
|
||||
|
||||
权限配置:
|
||||
- Configure: ^(orders|products|refunds|inventory)\.queue$ - 可以管理业务队列
|
||||
@@ -755,7 +755,7 @@ VHost: dataflow-app
|
||||
```
|
||||
用户名: user_ops
|
||||
密码: <安全密码>
|
||||
VHost: dataflow-app
|
||||
VHost: datahub-app
|
||||
|
||||
权限配置:
|
||||
- Configure: ^errors\..*$ - 可以管理错误相关资源
|
||||
@@ -792,7 +792,7 @@ message_id 采用结构化格式,确保幂等性和可追溯性。
|
||||
|
||||
**字段说明**:
|
||||
- `prefix`:项目名称前缀(如 `wpic-project1`)
|
||||
- `app_id`:应用标识(固定为 `dataflow`)
|
||||
- `app_id`:应用标识(固定为 `datahub`)
|
||||
- `company_id`:公司 ID
|
||||
- `platform_id`:平台 ID
|
||||
- `store_id`:店铺 ID
|
||||
@@ -805,11 +805,11 @@ message_id 采用结构化格式,确保幂等性和可追溯性。
|
||||
|
||||
**示例**:
|
||||
```
|
||||
wpic-project1#dataflow#100#20#200#order#2025-11-10~2025-11-15
|
||||
wpic-project1#datahub#100#20#200#order#2025-11-10~2025-11-15
|
||||
|
||||
解析:
|
||||
- 项目前缀: wpic-project1
|
||||
- 应用: dataflow
|
||||
- 应用: datahub
|
||||
- 公司ID: 100
|
||||
- 平台ID: 20 (DouYin)
|
||||
- 店铺ID: 200
|
||||
@@ -827,7 +827,7 @@ wpic-project1#dataflow#100#20#200#order#2025-11-10~2025-11-15
|
||||
|
||||
```json
|
||||
{
|
||||
"message_id": "wpic-project1#dataflow#100#20#200#order#DY123456",
|
||||
"message_id": "wpic-project1#datahub#100#20#200#order#DY123456",
|
||||
"timestamp": "2025-01-14T10:30:00Z",
|
||||
"platform": "douyin",
|
||||
"data_type": "order",
|
||||
@@ -876,7 +876,7 @@ wpic-project1#dataflow#100#20#200#order#2025-11-10~2025-11-15
|
||||
|
||||
### 3. 错误消息格式
|
||||
|
||||
错误消息由 dataflow 消费者生成,包含原始消息和错误详情。
|
||||
错误消息由 datahub 消费者生成,包含原始消息和错误详情。
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -917,7 +917,7 @@ URL: http://<rabbitmq-host>:15672
|
||||
|
||||
1. 点击顶部导航 **Admin** → **Virtual Hosts**
|
||||
2. 点击 **Add a new virtual host**
|
||||
3. 输入 VHost 名称:`dataflow-app`
|
||||
3. 输入 VHost 名称:`datahub-app`
|
||||
4. 点击 **Add virtual host**
|
||||
|
||||
### 3. 创建用户
|
||||
@@ -934,7 +934,7 @@ URL: http://<rabbitmq-host>:15672
|
||||
|
||||
1. 在用户列表中,点击用户名(如 `user_amazon`)
|
||||
2. 滚动到 **Permissions** 部分
|
||||
3. 选择 VHost:`dataflow-app`
|
||||
3. 选择 VHost:`datahub-app`
|
||||
4. 配置权限正则表达式:
|
||||
- **Configure regexp**: (留空)
|
||||
- **Write regexp**: `^amazon\.(exchange|errors\.exchange)$`
|
||||
@@ -944,7 +944,7 @@ URL: http://<rabbitmq-host>:15672
|
||||
### 5. 创建 Exchange
|
||||
|
||||
1. 点击顶部导航 **Exchanges**
|
||||
2. 确保选择正确的 VHost:`dataflow-app`
|
||||
2. 确保选择正确的 VHost:`datahub-app`
|
||||
3. 点击 **Add a new exchange**
|
||||
4. 填写配置:
|
||||
- **Name**: `amazon.exchange`
|
||||
@@ -959,7 +959,7 @@ URL: http://<rabbitmq-host>:15672
|
||||
### 6. 创建 Queue
|
||||
|
||||
1. 点击顶部导航 **Queues**
|
||||
2. 确保选择正确的 VHost:`dataflow-app`
|
||||
2. 确保选择正确的 VHost:`datahub-app`
|
||||
3. 点击 **Add a new queue**
|
||||
4. 填写配置:
|
||||
- **Name**: `orders.queue`
|
||||
@@ -1020,7 +1020,7 @@ RABBITMQ_HOST="127.0.0.1"
|
||||
RABBITMQ_PORT="15672"
|
||||
RABBITMQ_USER="admin"
|
||||
RABBITMQ_PASS="admin"
|
||||
VHOST="dataflow"
|
||||
VHOST="datahub"
|
||||
|
||||
# 平台列表
|
||||
PLATFORMS=("douyin" "jd" "tmall" "redbook" "amazon" "naver" "rakuten" "shopify")
|
||||
@@ -1058,7 +1058,7 @@ for platform in "${PLATFORMS[@]}"; do
|
||||
done
|
||||
|
||||
# 添加其他用户
|
||||
ALL_USERS+=("user_dataflow_consumer")
|
||||
ALL_USERS+=("user_datahub_consumer")
|
||||
ALL_USERS+=("user_ops")
|
||||
|
||||
# 删除用户(如果存在)
|
||||
@@ -1212,17 +1212,17 @@ for platform in "${PLATFORMS[@]}"; do
|
||||
echo "✓ 配置用户权限"
|
||||
done
|
||||
|
||||
# 10. 创建 dataflow 消费者用户
|
||||
# 10. 创建 datahub 消费者用户
|
||||
echo ""
|
||||
echo "========================================"
|
||||
echo "创建 dataflow 消费者用户..."
|
||||
echo "创建 datahub 消费者用户..."
|
||||
echo "========================================"
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare user --name "user_dataflow_consumer" --password "change_me_consumer" --tags ""
|
||||
echo "✓ 创建用户: user_dataflow_consumer"
|
||||
declare user --name "user_datahub_consumer" --password "change_me_consumer" --tags ""
|
||||
echo "✓ 创建用户: user_datahub_consumer"
|
||||
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare permissions --vhost "$VHOST" --user "user_dataflow_consumer" \
|
||||
declare permissions --vhost "$VHOST" --user "user_datahub_consumer" \
|
||||
--configure "^(orders|products|refunds|inventory).*\\.queue$" \
|
||||
--write "(dlx\\..*)|(.*\\.errors\\.exchange)$" \
|
||||
--read "^(orders|products|refunds|inventory).*\\.queue$"
|
||||
@@ -1331,7 +1331,7 @@ chmod +x setup_rabbitmq.sh
|
||||
```bash
|
||||
# 导出所有定义(Exchanges, Queues, Bindings, Users, Permissions)
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
export dataflow-backup.json
|
||||
export datahub-backup.json
|
||||
```
|
||||
|
||||
#### 导入配置
|
||||
@@ -1339,7 +1339,7 @@ rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ
|
||||
```bash
|
||||
# 从备份恢复配置
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
import dataflow-backup.json
|
||||
import datahub-backup.json
|
||||
```
|
||||
|
||||
### 4. 性能优化
|
||||
@@ -1354,7 +1354,7 @@ rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ
|
||||
|
||||
- 启用 lazy queue(大量消息堆积时):
|
||||
```bash
|
||||
rabbitmqadmin declare queue name=orders.queue vhost=dataflow-app \
|
||||
rabbitmqadmin declare queue name=orders.queue vhost=datahub-app \
|
||||
durable=true arguments='{"x-queue-mode":"lazy"}'
|
||||
```
|
||||
- 定期清理过期消息(通过 TTL 自动实现)
|
||||
@@ -1410,12 +1410,12 @@ tail -f /var/log/rabbitmq/rabbit@<hostname>_connection.log
|
||||
```bash
|
||||
# 业务 Exchange
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare exchange --name "lazada.exchange" --vhost dataflow-app \
|
||||
declare exchange --name "lazada.exchange" --vhost datahub-app \
|
||||
--type topic --durable true
|
||||
|
||||
# 错误 Exchange
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare exchange --name "lazada.errors.exchange" --vhost dataflow-app \
|
||||
declare exchange --name "lazada.errors.exchange" --vhost datahub-app \
|
||||
--type topic --durable true
|
||||
```
|
||||
|
||||
@@ -1425,24 +1425,24 @@ rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ
|
||||
# 绑定到业务队列
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare binding --source "lazada.exchange" --destination "orders.queue" \
|
||||
--destination-type queue --vhost dataflow-app --routing-key "order.lazada"
|
||||
--destination-type queue --vhost datahub-app --routing-key "order.lazada"
|
||||
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare binding --source "lazada.exchange" --destination "products.queue" \
|
||||
--destination-type queue --vhost dataflow-app --routing-key "product.lazada"
|
||||
--destination-type queue --vhost datahub-app --routing-key "product.lazada"
|
||||
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare binding --source "lazada.exchange" --destination "refunds.queue" \
|
||||
--destination-type queue --vhost dataflow-app --routing-key "refund.lazada"
|
||||
--destination-type queue --vhost datahub-app --routing-key "refund.lazada"
|
||||
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare binding --source "lazada.exchange" --destination "inventory.queue" \
|
||||
--destination-type queue --vhost dataflow-app --routing-key "inventory.lazada"
|
||||
--destination-type queue --vhost datahub-app --routing-key "inventory.lazada"
|
||||
|
||||
# 绑定到错误队列
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare binding --source "lazada.errors.exchange" --destination "errors.queue" \
|
||||
--destination-type queue --vhost dataflow-app --routing-key "#"
|
||||
--destination-type queue --vhost datahub-app --routing-key "#"
|
||||
```
|
||||
|
||||
### 3. 创建用户并配置权限
|
||||
@@ -1454,7 +1454,7 @@ rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ
|
||||
|
||||
# 配置权限
|
||||
rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ_PASS \
|
||||
declare permissions --vhost dataflow-app --user "user_lazada" \
|
||||
declare permissions --vhost datahub-app --user "user_lazada" \
|
||||
--configure "^lazada\\.(exchange|errors\\.exchange)$" \
|
||||
--write "^lazada\\.(exchange|errors\\.exchange)$" \
|
||||
--read "^lazada\\.errors\\..*$"
|
||||
@@ -1468,7 +1468,7 @@ rabbitmqadmin -H $RABBITMQ_HOST -P $RABBITMQ_PORT -u $RABBITMQ_USER -p $RABBITMQ
|
||||
RabbitMQ 连接信息:
|
||||
- Host: <rabbitmq-host>
|
||||
- Port: 5672
|
||||
- VHost: dataflow-app
|
||||
- VHost: datahub-app
|
||||
- Username: user_lazada
|
||||
- Password: <secure_password>
|
||||
|
||||
@@ -1496,7 +1496,7 @@ RabbitMQ 连接信息:
|
||||
|
||||
#### VHost
|
||||
- **总数**: 1 个
|
||||
- `dataflow-app`
|
||||
- `datahub-app`
|
||||
|
||||
#### Exchanges
|
||||
|
||||
@@ -1579,7 +1579,7 @@ RabbitMQ 连接信息:
|
||||
- 权限:只能写入自己的业务和错误 Exchange,只能读取自己的错误队列
|
||||
|
||||
**消费者账号**: 1 个
|
||||
- `user_dataflow_consumer`
|
||||
- `user_datahub_consumer`
|
||||
- 权限:可以管理所有业务队列和重试队列,可以写入 DLX 和错误 Exchange,可以读取所有业务队列
|
||||
|
||||
**运维监控账号**: 1 个
|
||||
@@ -1596,7 +1596,7 @@ RabbitMQ 连接信息:
|
||||
|
||||
| 资源类型 | 数量 | 说明 |
|
||||
|---------|------|------|
|
||||
| VHost | 1 | dataflow-app |
|
||||
| VHost | 1 | datahub-app |
|
||||
| Exchange | 21 | 1 主 + 8 平台业务 + 8 平台错误 + 4 DLX |
|
||||
| Queue | 9 | 4 主 + 4 重试 + 1 错误 |
|
||||
| Binding | 52 | 完整消息流转路径 |
|
||||
|
||||
Reference in New Issue
Block a user