mirror of
https://github.com/rachelos/we-mp-rss.git
synced 2026-08-29 01:41:39 +08:00
6.2 KiB
6.2 KiB
级联任务分发系统 - 故障排查指南
问题1: 级联客户端未初始化
症状
运行子节点时出现:
级联客户端未初始化
原因
- 级联模式未启用
- 配置不完整(缺少parent_api_url/api_key/api_secret)
- 配置文件未正确加载
解决方案
步骤1: 检查配置
# 运行测试脚本
python test_cascade_init.py
步骤2: 确保config.yaml配置正确
# config.yaml
cascade:
enabled: true
node_type: child
parent_api_url: "http://parent-server:8001"
api_key: "CNxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
api_secret: "CSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
sync_interval: 300
heartbeat_interval: 60
步骤3: 验证初始化
from jobs.cascade_sync import cascade_sync_service
# 手动初始化
cascade_sync_service.initialize()
# 检查是否成功
if cascade_sync_service.client:
print("✓ 初始化成功")
else:
print("✗ 初始化失败")
自动修复
最新版本的 cascade_task_dispatcher.py 已添加自动初始化逻辑:
# 如果客户端未初始化,尝试初始化
if not cascade_sync_service.client:
print_info("级联客户端未初始化,正在初始化...")
cascade_sync_service.initialize()
问题2: 无法连接到父节点
症状
请求父节点失败: 404 - Not Found
请求父节点失败: Connection refused
原因
- 父节点地址错误
- 父节点未启动
- 网络不通
- API Key/Secret 错误
解决方案
检查父节点状态
# 测试父节点连接
curl "http://parent-server:8001/api/v1/cascade/heartbeat" \
-H "Authorization: AK-SK YOUR_API_KEY:YOUR_API_SECRET"
验证凭证
# 在父节点上查看子节点凭证
python jobs/cascade_init.py --list
问题3: 没有任务可获取
症状
暂无任务,等待下次轮询...
原因
- 父节点没有分配任务
- 任务已分配给其他节点
- 任务状态不是pending
解决方案
在父节点上手动分发任务
# 方式1: API调用
curl -X POST "http://localhost:8001/api/v1/cascade/dispatch-task" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
# 方式2: 运行示例
python examples/cascade_task_dispatcher_example.py parent
检查分配记录
curl "http://localhost:8001/api/v1/cascade/allocations" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
问题4: 任务执行失败
症状
处理公众号失败 xxx: ...
执行父节点任务失败: ...
原因
- 公众号不存在
- 网络问题
- 微信接口限制
- 配置错误
解决方案
检查公众号是否存在
from core.db import DB
from core.models.feed import Feed
session = DB.get_session()
feed = session.query(Feed).filter(Feed.id == "mp_id").first()
if feed:
print(f"✓ 公众号存在: {feed.mp_name}")
else:
print("✗ 公众号不存在")
检查任务配置
from core.db import DB
from core.models.message_task import MessageTask
session = DB.get_session()
task = session.query(MessageTask).filter(MessageTask.id == "task_id").first()
print(f"任务名称: {task.name}")
print(f"web_hook_url: {task.web_hook_url}")
print(f"mps_id: {task.mps_id}")
问题5: 模块导入错误
症状
ModuleNotFoundError: No module named 'core'
解决方案
已在相关文件中添加路径处理,确保从项目根目录运行:
# 方式1: 从项目根目录运行
python -m jobs.cascade_task_dispatcher child
# 方式2: 直接运行(已添加路径处理)
cd jobs
python cascade_task_dispatcher.py child
调试技巧
1. 启用详细日志
from core.print import print_info, print_success, print_error, print_warning
print_info("信息日志")
print_success("成功日志")
print_error("错误日志")
print_warning("警告日志")
2. 检查节点状态
from jobs.cascade_task_dispatcher import cascade_task_dispatcher
# 刷新节点状态
cascade_task_dispatcher.refresh_node_statuses()
# 查看节点状态
for node_id, status in cascade_task_dispatcher.node_statuses.items():
print(f"节点: {status.node_name}")
print(f" 在线: {status.is_online}")
print(f" 可用: {status.is_available}")
print(f" 容量: {status.current_tasks}/{status.max_capacity}")
3. 检查分配记录
from jobs.cascade_task_dispatcher import cascade_task_dispatcher
for alloc_id, allocation in cascade_task_dispatcher.allocations.items():
print(f"分配ID: {alloc_id}")
print(f" 任务ID: {allocation.task_id}")
print(f" 公众号数: {len(allocation.feed_ids)}")
print(f" 状态: {allocation.status}")
4. 测试API接口
# 测试获取待处理任务
curl "http://parent:8001/api/v1/cascade/pending-tasks" \
-H "Authorization: AK-SK CNxxx:CSxxx"
# 测试分发任务
curl -X POST "http://localhost:8001/api/v1/cascade/dispatch-task" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
# 测试查看分配
curl "http://localhost:8001/api/v1/cascade/allocations" \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
完整测试流程
# 1. 验证导入
python verify_imports.py
# 2. 测试初始化
python test_cascade_init.py
# 3. 运行完整测试
python test_cascade_task_dispatcher.py
# 4. 父节点分发任务
python examples/cascade_task_dispatcher_example.py parent
# 5. 子节点拉取任务
python examples/cascade_task_dispatcher_example.py child
常见问题速查表
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 级联客户端未初始化 | 配置不完整 | 检查config.yaml,运行test_cascade_init.py |
| 无法连接父节点 | 地址错误或父节点未启动 | 检查parent_api_url,确保父节点运行 |
| 没有任务 | 未分发任务 | 在父节点运行dispatch-task |
| 任务执行失败 | 公众号不存在或配置错误 | 检查公众号和任务配置 |
| 模块导入错误 | 路径问题 | 从项目根目录运行或使用-m方式 |
获取帮助
如果以上方法都无法解决问题:
- 查看详细日志输出
- 检查配置文件是否正确加载
- 确认所有依赖已安装
- 参考完整文档:
docs/CASCADE_TASK_DISPATCHER.md