4.9 KiB
4.9 KiB
task_status_${snCode} 主题推送位置分析
一、推送位置(服务端)
1. 任务状态变更推送 (task_status_update)
位置: autoAiWorkSys/api/middleware/schedule/taskQueue.js
方法: notifyTaskStatusChange(sn_code, taskData)
推送时机:
-
✅ 任务开始执行时 (第586行)
- 状态:
running - 进度:
0 - 触发位置:
executeTask方法中,任务开始执行时
- 状态:
-
✅ 任务完成时 (第631行)
- 状态:
completed - 进度:
100 - 触发位置:
executeTask方法中,任务成功完成后
- 状态:
-
✅ 任务失败时 (第675行)
- 状态:
failed - 进度:
0 - 错误信息:
errorMessage - 触发位置:
executeTask方法中,任务执行失败时
- 状态:
推送内容:
{
action: 'task_status_update',
data: {
taskId: task.id,
taskName: task.taskName,
taskType: task.taskType,
status: 'running' | 'completed' | 'failed',
progress: 0 | 100,
errorMessage?: string,
endTime?: Date
},
timestamp: string
}
2. 任务状态摘要推送 (task_status_summary)
位置: autoAiWorkSys/api/middleware/schedule/taskQueue.js
方法: sendTaskStatusSummary(sn_code)
推送时机:
- ✅ 定时推送 (每10秒一次)
- 位置:
autoAiWorkSys/api/middleware/schedule/scheduledJobs.js - 方法:
syncTaskStatusSummary() - 条件: 只向在线设备推送(最后心跳时间 < 3分钟)
- 位置:
推送内容:
{
action: 'task_status_summary',
data: {
sn_code: string,
currentTask: {
taskId: number,
taskName: string,
taskType: string,
status: 'running',
progress: number,
currentStep: string,
startTime: Date,
jobTitle?: string, // 新增:职位名称
companyName?: string // 新增:公司名称
} | null,
pendingTasks: Array<{
taskId: number,
taskName: string,
taskType: string,
status: 'pending',
scheduledTime: Date,
priority: number
}>,
nextTaskTime: Date | null,
pendingCount: number, // 队列中的任务数
totalPendingCount: number, // 总待执行数(包括当前任务的剩余步骤)
mqttTopic: string,
timestamp: string
},
timestamp: string
}
二、接收位置(客户端)
1. MQTT 订阅
位置: boss-automation-nodejs/src/services/mqttService.js
订阅时机: MQTT 连接成功后 (第360行)
订阅代码:
const taskStatusTopic = `task_status_${this.config.snCode}`;
this.client.subscribe(taskStatusTopic, { qos: 1 });
2. 消息处理
位置: boss-automation-nodejs/src/services/mqttService.js
处理方法: handleMessage (第292行)
处理逻辑:
-
如果
action === 'task_status_update':- 发送到渲染进程:
task:status-update
- 发送到渲染进程:
-
如果
action === 'task_status_summary':- 发送到渲染进程:
task:status-summary
- 发送到渲染进程:
3. 渲染进程接收
位置: boss-automation-nodejs/app/mixins/taskMixin.js
方法:
onTaskStatusUpdate(taskData)- 处理任务状态变更onTaskStatusSummary(summary)- 处理任务状态摘要
事件监听: boss-automation-nodejs/app/mixins/eventListenerMixin.js
三、当前推送策略分析
✅ 优点
- 实时性: 任务状态变更立即推送
- 完整性: 定时推送完整的状态摘要
- 可靠性: 只向在线设备推送,避免资源浪费
⚠️ 潜在问题
- 推送频率: 定时任务每10秒推送一次,可能过于频繁
- 重复推送: 任务状态变更和定时摘要可能推送重复信息
- 推送时机: 某些关键状态变更可能没有及时推送(如进度更新)
四、建议的优化方案
方案1: 减少定时推送频率
- 当前: 每10秒推送一次
- 建议: 改为每30秒或60秒推送一次
- 理由: 任务状态变更已实时推送,定时推送主要用于同步完整状态
方案2: 只在关键时机推送摘要
- 任务队列变化时推送(新增/删除任务)
- 当前任务完成/失败时推送
- 定时推送作为兜底(频率降低)
方案3: 合并推送
- 将任务状态变更和摘要合并为一个消息
- 减少消息数量,提高效率
方案4: 添加进度更新推送
- 任务执行过程中,定期推送进度更新
- 例如:每完成10%进度推送一次
五、需要推送的场景建议
✅ 必须推送的场景
- 任务开始执行 - 立即推送状态变更
- 任务完成 - 立即推送状态变更 + 状态摘要
- 任务失败 - 立即推送状态变更 + 状态摘要
- 任务队列变化 - 新增/删除任务时推送摘要
⚠️ 可选推送的场景
- 进度更新 - 每10%或每完成一个步骤推送一次
- 定时同步 - 作为兜底,频率降低到30-60秒
❌ 不需要推送的场景
- 任务状态未变化 - 避免重复推送相同状态
- 设备离线 - 不向离线设备推送