modelRT/doc/async_task_api.md

16 KiB
Raw Permalink Blame History

ModelRT 异步任务 API 文档

1. 概述

ModelRT 异步任务系统基于 RabbitMQ 消息驱动,提供完整的任务生命周期管理。任务创建后进入队列,由后台 Worker 消费并执行,调用方可通过轮询接口获取进度和结果。

Base URL: http://{host}:{port}(默认 localhost:8080

鉴权: 公开接口需在 Header 中携带 X-Service-Token(由服务端启动时生成)。


2. API 端点总览

方法 路径 描述 权限
POST /task/async 创建异步任务 公开
GET /task/async/results 批量查询任务结果 公开
GET /task/async/{task_id} 查询单个任务详情 公开
POST /task/async/{task_id}/cancel 取消异步任务 公开
POST /task/internal/async/progress 更新任务进度 内部
POST /task/internal/async/status 更新任务状态 内部

3. 通用响应结构

成功响应

{
  "code": 2000,
  "msg": "success message",
  "payload": {}
}

失败响应

{
  "code": 4001,
  "msg": "error description",
  "payload": null
}

响应码说明

code 含义
2000 成功
3000 处理失败
4001 请求参数无效
4002 未授权Token 无效)
5000 服务器内部错误

4. 详细接口说明

4.1 创建异步任务

POST /task/async

创建新的异步任务,任务进入队列等待 Worker 消费。返回 task_id 用于后续查询。

请求头

Content-Type: application/json
X-Service-Token: <token>

请求体

{
  "task_type": "TOPOLOGY_ANALYSIS",
  "params": { }
}
字段 类型 必填 说明
task_type string 任务类型,枚举值见 §5.1
params object 任务参数,不同任务类型的参数结构见 §5.3

成功响应 200

{
  "code": 2000,
  "msg": "task created successfully",
  "payload": {
    "task_id": "123e4567-e89b-12d3-a456-426614174000"
  }
}

失败响应

场景 code msg
参数格式错误 4001 invalid request parameters
task_type 不合法 4001 invalid task type
params 内容不合法 4001 invalid task parameters
数据库连接失败 5000 database connection error
任务写库失败 5000 failed to create task

curl 示例

curl -X POST "http://localhost:8080/task/async" \
  -H "Content-Type: application/json" \
  -H "X-Service-Token: <token>" \
  -d '{
    "task_type": "TOPOLOGY_ANALYSIS",
    "params": {
      "start_component_uuid": "550e8400-e29b-41d4-a716-446655440000",
      "end_component_uuid": "550e8400-e29b-41d4-a716-446655440001",
      "check_in_service": true
    }
  }'

4.2 批量查询任务结果

GET /task/async/results

根据一组任务 ID 批量查询状态和结果,适用于轮询多个任务。

Query 参数

参数 类型 必填 说明
task_ids string 逗号分隔的 UUID 列表,最少 1 个

请求示例

GET /task/async/results?task_ids=123e4567-e89b-12d3-a456-426614174000,223e4567-e89b-12d3-a456-426614174001

成功响应 200

{
  "code": 2000,
  "msg": "query completed",
  "payload": {
    "total": 2,
    "tasks": [
      {
        "task_id": "123e4567-e89b-12d3-a456-426614174000",
        "task_type": "TOPOLOGY_ANALYSIS",
        "status": "RUNNING",
        "progress": 50,
        "created_at": 1741846200
      },
      {
        "task_id": "223e4567-e89b-12d3-a456-426614174001",
        "task_type": "PERFORMANCE_ANALYSIS",
        "status": "COMPLETED",
        "progress": 100,
        "created_at": 1741846200,
        "finished_at": 1741846260,
        "result": {
          "components_analyzed": 5
        }
      }
    ]
  }
}

失败响应

场景 code msg
缺少 task_ids 4001 task_ids parameter is required
UUID 格式不合法 4001 invalid task ID format
数据库连接失败 5000 database connection error
查询失败 5000 failed to query tasks

curl 示例

curl "http://localhost:8080/task/async/results?task_ids=123e4567-e89b-12d3-a456-426614174000"

4.3 查询单个任务详情

GET /task/async/{task_id}

查询单个任务的完整信息,包含结果或错误详情。

路径参数

参数 类型 必填 说明
task_id string 任务 UUID

成功响应 200

{
  "code": 2000,
  "msg": "query completed",
  "payload": {
    "task_id": "123e4567-e89b-12d3-a456-426614174000",
    "task_type": "TOPOLOGY_ANALYSIS",
    "status": "COMPLETED",
    "progress": 100,
    "created_at": 1741846200,
    "finished_at": 1741846260,
    "result": {
      "path_exists": true,
      "path_length": 3,
      "path_nodes": ["comp-001", "comp-005", "comp-999"]
    }
  }
}

任务失败时 payload 附带错误信息:

{
  "code": 2000,
  "msg": "query completed",
  "payload": {
    "task_id": "123e4567-e89b-12d3-a456-426614174000",
    "task_type": "TOPOLOGY_ANALYSIS",
    "status": "FAILED",
    "created_at": 1741846200,
    "finished_at": 1741846210,
    "error_code": 400102,
    "error_message": "Component UUID not found",
    "error_detail": {
      "component_uuid": "550e8400-0000-0000-0000-000000000000"
    }
  }
}

失败响应

场景 code msg
缺少 task_id 4001 task_id parameter is required
UUID 格式不合法 4001 invalid task ID format
任务不存在 404 task not found
数据库连接失败 5000 database connection error

curl 示例

curl "http://localhost:8080/task/async/123e4567-e89b-12d3-a456-426614174000"

4.4 取消异步任务

POST /task/async/{task_id}/cancel

取消指定任务。SUBMITTED(排队中)状态的任务可以被取消,已开始执行(RUNNING)或已结束的任务无法取消。

取消后任务状态变为 FAILED,错误码 40003,错误信息 task cancelled by user

路径参数

参数 类型 必填 说明
task_id string 任务 UUID

成功响应 200

{
  "code": 2000,
  "msg": "task cancelled successfully"
}

失败响应

场景 code msg
缺少 task_id 400 task_id parameter is required
UUID 格式不合法 400 invalid task ID format
任务不存在 404 task not found
任务已执行或已完成 400 task cannot be cancelled (already running or completed)
数据库连接失败 500 database connection error
取消操作失败 500 failed to cancel task

curl 示例

curl -X POST "http://localhost:8080/task/async/123e4567-e89b-12d3-a456-426614174000/cancel"

4.5 内部接口:更新任务进度

POST /task/internal/async/progress

由 Worker 内部调用更新任务执行进度0-100

请求体

{
  "task_id": "123e4567-e89b-12d3-a456-426614174000",
  "progress": 75
}
字段 类型 必填 说明
task_id string 任务 UUID
progress int 进度值,范围 0-100

成功响应 200

{
  "code": 2000,
  "msg": "task progress updated successfully",
  "payload": null
}

4.6 内部接口:更新任务状态

POST /task/internal/async/status

由 Worker 内部调用,更新任务状态。当状态更新为 COMPLETEDFAILED 时,同步写入 finished_at 时间戳。

请求体

{
  "task_id": "123e4567-e89b-12d3-a456-426614174000",
  "status": "RUNNING",
  "timestamp": 1741846205
}
字段 类型 必填 说明
task_id string 任务 UUID
status string 目标状态,枚举值见 §5.2
timestamp int64 状态变更时间戳Unix 秒)

成功响应 200

{
  "code": 2000,
  "msg": "task status updated successfully",
  "payload": null
}

5. 数据结构参考

5.1 任务类型task_type

枚举值 描述
TOPOLOGY_ANALYSIS 拓扑连通性分析
PERFORMANCE_ANALYSIS 性能分析
EVENT_ANALYSIS 事件分析
BATCH_IMPORT 批量数据导入
TEST 测试任务(系统验证用)

5.2 任务状态status

枚举值 描述 可转换至
SUBMITTED 已提交至队列 RUNNING, FAILED(取消)
RUNNING 正在执行 COMPLETED, FAILED
COMPLETED 执行成功
FAILED 执行失败或被取消

5.3 各任务类型的 params 结构

TOPOLOGY_ANALYSIS — 拓扑连通性分析

分析两个元件之间是否存在连通路径。

{
  "start_component_uuid": "550e8400-e29b-41d4-a716-446655440000",
  "end_component_uuid":   "550e8400-e29b-41d4-a716-446655440001",
  "check_in_service":     true
}
字段 类型 必填 说明
start_component_uuid string 起始元件 UUID
end_component_uuid string 目标元件 UUID
check_in_service boolean 是否只检查投运状态元件,默认 true

PERFORMANCE_ANALYSIS — 性能分析

{
  "component_ids": ["comp-001", "comp-002"],
  "time_range": {
    "start": "2026-03-01T00:00:00Z",
    "end":   "2026-03-02T00:00:00Z"
  }
}
字段 类型 必填 说明
component_ids []string 待分析的元件 ID 列表(至少 1 个)
time_range object 分析时间范围

EVENT_ANALYSIS — 事件分析

{
  "event_type":  "MOTOR_START",
  "start_time":  "2026-03-01T00:00:00Z",
  "end_time":    "2026-03-02T00:00:00Z",
  "components":  ["comp-001", "comp-002"]
}
字段 类型 必填 说明
event_type string 事件类型
start_time string 事件起始时间RFC3339
end_time string 事件截止时间RFC3339
components []string 关联的元件列表

BATCH_IMPORT — 批量导入

{
  "file_path": "/data/import/model.csv",
  "file_type": "CSV",
  "options": {
    "overwrite":    false,
    "validate":     true,
    "notify_user":  true
  }
}
字段 类型 必填 说明
file_path string 导入文件路径
file_type string 文件类型:CSV, JSON, XML
options.overwrite boolean 是否覆盖已有数据,默认 false
options.validate boolean 是否校验数据,默认 true
options.notify_user boolean 完成后是否通知用户,默认 true

TEST — 测试任务

{
  "sleep_duration": 30
}
字段 类型 必填 说明
sleep_duration int 模拟执行耗时(秒),默认 60最大 3600

5.4 任务结果对象AsyncTaskResult

字段 类型 说明
task_id string 任务 UUID
task_type string 任务类型
status string 当前状态
progress int 进度0-100RUNNING 时返回
created_at int64 创建时间戳Unix 秒)
finished_at int64 完成时间戳Unix 秒),仅 COMPLETED/FAILED 返回
result object 任务结果,仅 COMPLETED 时返回
error_code int 错误码,仅 FAILED 时返回
error_message string 错误描述,仅 FAILED 时返回
error_detail object 错误详情,仅 FAILED 时返回

6. 典型调用流程

创建任务
  └─ POST /task/async
       └─ 返回 task_id

轮询状态(建议间隔 2-5 秒)
  └─ GET /task/async/{task_id}
       ├─ status=SUBMITTED → 继续等待
       ├─ status=RUNNING   → 查看 progress
       ├─ status=COMPLETED → 读取 result 字段
       └─ status=FAILED    → 读取 error_code / error_message

如需中止(仅 SUBMITTED 状态有效)
  └─ POST /task/async/{task_id}/cancel

7. 队列配置参考

配置项
Exchange modelrt.tasks.exchange
Queue modelrt.tasks.queue
Routing Key modelrt.task
优先级范围 010默认 5
消息 TTL 24 小时
最大重试次数 3 次
重试初始延迟 1 秒(指数退避,最大 5 分钟)

文档版本: 1.1
最后更新: 2026-04-28
相关文档: 异步任务系统设计文档