doc: 移动一下文档位置
This commit is contained in:
126
docs/TaskManager_WebSocket_Implementation.md
Normal file
126
docs/TaskManager_WebSocket_Implementation.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# TaskManager WebSocket消息处理功能实现
|
||||
|
||||
## 功能概述
|
||||
|
||||
根据后端TaskManager的WebSocket消息机制,实现了前端对ID为"TaskManager"的WebSocket消息的完整处理逻辑。
|
||||
|
||||
## 后端TaskManager消息分析
|
||||
|
||||
### 消息格式
|
||||
```json
|
||||
{
|
||||
"id": "TaskManager",
|
||||
"type": "Signal",
|
||||
"data": {
|
||||
"newTask": "任务UUID"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 触发时机
|
||||
当后端启动时运行的队列开始执行时,TaskManager会发送此消息通知前端有新任务被自动创建。
|
||||
|
||||
## 前端实现
|
||||
|
||||
### 1. WebSocket订阅机制
|
||||
在`useSchedulerLogic.ts`中添加了以下功能:
|
||||
|
||||
- **subscribeToTaskManager()**: 订阅ID为"TaskManager"的WebSocket消息
|
||||
- **handleTaskManagerMessage()**: 处理TaskManager发送的消息
|
||||
- **createSchedulerTabForTask()**: 根据任务ID自动创建调度台
|
||||
|
||||
### 2. 自动调度台创建逻辑
|
||||
|
||||
当收到`newTask`信号时,系统会:
|
||||
|
||||
1. **检查重复**: 验证是否已存在相同websocketId的调度台
|
||||
2. **创建调度台**: 自动创建新的调度台标签页
|
||||
3. **设置状态**: 直接将调度台状态设置为"运行"
|
||||
4. **建立连接**: 立即订阅该任务的WebSocket消息
|
||||
5. **用户提示**: 显示成功创建的消息提示
|
||||
|
||||
### 3. 调度台特性
|
||||
|
||||
自动创建的调度台具有以下特性:
|
||||
- 标题格式:`自动调度台{编号}`
|
||||
- 初始状态:`运行`
|
||||
- 可关闭:`true`(但运行时不可删除)
|
||||
- 自动订阅:立即开始接收任务消息
|
||||
|
||||
### 4. 生命周期管理
|
||||
|
||||
- **初始化**: 在组件挂载时调用`initialize()`订阅TaskManager消息
|
||||
- **清理**: 在组件卸载时取消TaskManager订阅
|
||||
- **任务结束**: 复用现有的任务结束处理逻辑
|
||||
|
||||
## 代码修改点
|
||||
|
||||
### 1. useSchedulerLogic.ts
|
||||
```typescript
|
||||
// 新增TaskManager消息订阅
|
||||
const subscribeToTaskManager = () => {
|
||||
ws.subscribe('TaskManager', {
|
||||
onMessage: (message) => handleTaskManagerMessage(message)
|
||||
})
|
||||
}
|
||||
|
||||
// 新增TaskManager消息处理
|
||||
const handleTaskManagerMessage = (wsMessage: any) => {
|
||||
if (type === 'Signal' && data && data.newTask) {
|
||||
createSchedulerTabForTask(data.newTask)
|
||||
}
|
||||
}
|
||||
|
||||
// 新增自动调度台创建
|
||||
const createSchedulerTabForTask = (taskId: string) => {
|
||||
// 创建运行状态的调度台并立即订阅
|
||||
}
|
||||
```
|
||||
|
||||
### 2. index.vue
|
||||
```typescript
|
||||
// 生命周期中添加初始化调用
|
||||
onMounted(() => {
|
||||
initialize() // 订阅TaskManager消息
|
||||
loadTaskOptions()
|
||||
})
|
||||
```
|
||||
|
||||
## 功能特点
|
||||
|
||||
### 1. 无缝集成
|
||||
- 完全复用现有的调度台逻辑和UI组件
|
||||
- 与手动创建的调度台行为一致
|
||||
- 支持所有现有功能(日志显示、任务总览、消息处理等)
|
||||
|
||||
### 2. 状态同步
|
||||
- 调度台状态与后端任务状态严格同步
|
||||
- 支持任务完成后的自动状态更新
|
||||
- 正确处理WebSocket连接的建立和清理
|
||||
|
||||
### 3. 用户体验
|
||||
- 自动切换到新创建的调度台
|
||||
- 提供清晰的成功提示
|
||||
- 防止重复创建相同任务的调度台
|
||||
|
||||
### 4. 错误处理
|
||||
- 检查消息格式的有效性
|
||||
- 防止重复订阅和创建
|
||||
- 优雅处理异常情况
|
||||
|
||||
## 测试验证
|
||||
|
||||
功能实现后需要验证以下场景:
|
||||
|
||||
1. **启动时队列**: 后端启动时运行的队列应自动创建调度台
|
||||
2. **消息接收**: 调度台应正确接收和显示任务消息
|
||||
3. **状态更新**: 任务状态变化应正确反映在UI上
|
||||
4. **任务结束**: 任务完成后应正确清理资源
|
||||
5. **重复处理**: 相同任务不应创建多个调度台
|
||||
|
||||
## 兼容性
|
||||
|
||||
- 完全向后兼容现有功能
|
||||
- 不影响手动创建的调度台
|
||||
- 保持现有的WebSocket消息处理机制
|
||||
- 复用所有现有的UI组件和样式
|
||||
Reference in New Issue
Block a user