跳到主要内容

任务分发系统

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件面向任务分发系统的技术文档,围绕任务调度架构、队列管理、优先级与并发控制、资源分配、任务分发算法、状态管理、消息队列集成、监控与追踪、配置管理与批量操作等主题展开。通过对现有代码的深入分析,结合数据库表结构与框架组件,形成一套可操作、可扩展、可观测的任务分发解决方案。

项目结构

任务分发系统主要分布在以下模块与框架组件中:

  • 任务域服务:yudao-module-task(任务创建、分发、状态管理、设备匹配)
  • 规则引擎:yudao-module-rule(规则匹配、业务限制、Redis缓存)
  • 消息中间件:yudao-spring-boot-starter-mq(Redis Stream、Kafka)
  • 定时任务:yudao-spring-boot-starter-job(XXL-Job、Quartz)
  • 监控链路:yudao-spring-boot-starter-monitor(OpenTracing/SkyWalking)
  • 设备域:yudao-module-device(设备信息、MAC类型)

Mermaid Diagram Code:

graph TB
subgraph "任务域"
TS["TaskServiceImpl<br/>任务服务实现"]
TR["TaskRegionRedisDAO<br/>区域缓存"]
TC["TaskConfig<br/>任务配置"]
end
subgraph "规则引擎"
RU["RuleRunUtil<br/>规则匹配工具"]
RBL["RuleBusinessLimitConsumer<br/>业务限制消费者"]
end
subgraph "消息中间件"
RPS["RedisPendingMessageResendJob<br/>Redis待处理消息重投"]
KAC["KafkaAutoConfiguration<br/>Kafka重试与死信"]
end
subgraph "定时任务"
TJ["TaskJob<br/>定时任务作业"]
QSQL["quartz.sql<br/>Quartz表结构"]
end
subgraph "监控链路"
TFU["TracerFrameworkUtils<br/>链路追踪工具"]
end
TS --> RU
TS --> TR
TS --> TC
RU --> RBL
RPS --> TS
KAC --> RBL
TJ --> TS
QSQL --> TJ
TFU --> TS

图表来源

章节来源

核心组件

  • 任务服务实现:负责任务创建、更新、删除、分页查询、设备统计增强、规则匹配与推送处理。
  • 规则匹配工具:基于Redis缓存与LiteFlow表达式引擎进行规则匹配与数量限制检查。
  • 消息队列组件:Redis Stream待处理消息重投、Kafka重试与死信处理。
  • 定时任务:XXL-Job与Quartz驱动的任务执行与调度。
  • 监控链路:OpenTracing/SkyWalking链路追踪与异常标注。
  • 配置管理:任务配置项支持动态刷新。

章节来源

架构概览

系统采用“任务域服务 + 规则引擎 + 消息中间件 + 定时任务 + 监控链路”的分层架构。任务域服务负责任务生命周期与设备匹配;规则引擎通过Redis与LiteFlow实现高效规则匹配;消息中间件保障消息可靠投递与重试;定时任务支撑周期性任务;监控链路贯穿全链路追踪与异常标注。

Mermaid Diagram Code:

sequenceDiagram
participant 设备 as "设备/机顶盒"
participant 任务域 as "TaskServiceImpl"
participant 规则引擎 as "RuleRunUtil"
participant Redis as "Redis缓存"
participant LiteFlow as "LiteFlow引擎"
participant MQ as "消息中间件"
设备->>任务域 : 请求任务推送
任务域->>规则引擎 : 规则匹配(matchBusinessIds)
规则引擎->>Redis : 读取候选规则集合
规则引擎->>LiteFlow : 执行表达式匹配
LiteFlow-->>规则引擎 : 返回匹配结果
规则引擎-->>任务域 : 返回业务ID集合
任务域->>MQ : 发送任务推送消息
MQ-->>任务域 : 确认/重试/死信处理
任务域-->>设备 : 返回任务推送结果

图表来源

详细组件分析

任务服务实现(TaskServiceImpl)

  • 任务生命周期管理:创建、更新、删除、草稿与审批状态联动。
  • 设备统计增强:批量获取渠道/模型设备数量,避免N+1查询。
  • 规则匹配与推送:按渠道/MAC过滤,结合区域限制与规则生效状态。
  • 资源信息构建:根据文件ID构建推送数据,支持URL重定向与自动启动等字段。

Mermaid Diagram Code:

flowchart TD
Start(["进入任务推送"]) --> GetChannel["按渠道获取任务ID集合"]
GetChannel --> LoadTask["加载任务详情(含Redis缓存)"]
LoadTask --> FilterStatus["过滤状态为启用的任务"]
FilterStatus --> RegionCheck{"区域限制校验"}
RegionCheck --> |不通过| Skip["跳过该任务"]
RegionCheck --> |通过| BuildData["构建推送数据(文件/规则字段)"]
BuildData --> AddToList["加入结果列表"]
Skip --> Next["下一个任务"]
AddToList --> Next
Next --> End(["返回推送结果"])

图表来源

章节来源

规则匹配与业务限制(RuleRunUtil、RuleBusinessLimitConsumer)

  • 规则匹配:基于Redis的MAC/渠道/业务类型规则集合,通过LiteFlow表达式引擎进行条件匹配与地区限制检查,最终返回业务ID集合。
  • 业务限制:Kafka消费者接收业务数量变更事件,采用分布式锁与本地阻塞队列兜底,确保高并发下的可靠性与顺序性。

Mermaid Diagram Code:

sequenceDiagram
participant 规则引擎 as "RuleRunUtil"
participant Redis as "Redis"
participant LiteFlow as "LiteFlow"
participant 业务系统 as "业务系统"
业务系统->>规则引擎 : 请求规则匹配(业务类型, 设备信息)
规则引擎->>Redis : 读取候选规则集合
规则引擎->>LiteFlow : 执行表达式匹配
LiteFlow-->>规则引擎 : 匹配结果
规则引擎-->>业务系统 : 返回业务ID集合

图表来源

章节来源

消息队列集成(Redis Stream、Kafka)

  • Redis Stream:待处理消息重投作业,基于消费者组Pending队列扫描超时消息并重新投递,配合Redisson分布式锁保证幂等。
  • Kafka:配置固定退避重试与死信发布恢复器,针对反序列化异常进行跳过并记录日志。

Mermaid Diagram Code:

flowchart TD
Scan["扫描消费者Pending队列"] --> CheckTimeout{"消息是否超时"}
CheckTimeout --> |否| Skip["跳过该消息"]
CheckTimeout --> |是| FetchMsg["获取消息体"]
FetchMsg --> Resend["重新投递消息"]
Resend --> Ack["确认消费完成"]
Skip --> Next["下一个消息"]
Ack --> Next

图表来源

章节来源

定时任务与监控(XXL-Job、Quartz、链路追踪)

  • XXL-Job:定时任务作业,用于批量缓存任务推送结果到Redis。
  • Quartz:数据库驱动的调度表结构,支持任务名称、状态、处理器、CRON表达式、重试与监控超时等字段。
  • 链路追踪:异常标注到Span,记录错误类型、消息与堆栈信息。

Mermaid Diagram Code:

classDiagram
class TaskJob {
+taskJobPushResultCache()
}
class QuartzJob {
+name
+status
+handler_name
+cron_expression
+retry_count
+retry_interval
+monitor_timeout
}
class TracerFrameworkUtils {
+onError(throwable, span)
}
TaskJob --> QuartzJob : "调度执行"
TracerFrameworkUtils --> TaskJob : "异常追踪"

图表来源

章节来源

任务状态管理

  • 状态枚举:包含未开始、审批中、审批通过、审批不通过、已取消、退回、审批通过中、待审批等。
  • BPM状态联动:任务主表与子表(规则、区域、渠道、设备)生效状态一致时,更新为审批通过;否则保持未开始。
  • 取消与草稿:支持取消更新、撤销草稿、审批状态回滚等操作。

Mermaid Diagram Code:

stateDiagram-v2
[*] --> 未开始
未开始 --> 审批中 : "提交审批"
审批中 --> 审批通过 : "审批通过"
审批中 --> 审批不通过 : "审批不通过"
审批中 --> 已取消 : "取消"
审批通过 --> 待审批 : "草稿/更新"
待审批 --> 审批中 : "重新提交"

图表来源

章节来源

并发度限制与拒绝策略

  • 拒绝策略:当线程池队列满时抛出业务异常,提示稍后重试或前往任务中心手动启动。
  • 本地队列兜底:Kafka消费者在获取分布式锁失败时,将消息放入本地阻塞队列,由后台线程重试处理。

章节来源

资源分配与设备选择

  • 设备类型:设备MAC类型枚举区分不同设备类型(如巴伦平台MAC),便于后续差异化处理。
  • 区域缓存:任务与区域关系通过Redis集合维护,支持随机过期与缓存穿透键清理。

章节来源

依赖关系分析

  • 任务域服务依赖规则引擎与设备API,通过Redis缓存提升查询性能。
  • 规则引擎依赖Redis与LiteFlow,实现高效规则匹配。
  • 消息中间件提供可靠投递与重试,保障任务分发稳定性。
  • 定时任务与监控链路贯穿系统全生命周期,提供可观测性与可维护性。

Mermaid Diagram Code:

graph LR
TaskServiceImpl --> RuleRunUtil
TaskServiceImpl --> TaskRegionRedisDAO
RuleRunUtil --> LiteFlow
RuleRunUtil --> Redis
RuleBusinessLimitConsumer --> Kafka
RedisPendingMessageResendJob --> Redis
TaskJob --> Quartz
TracerFrameworkUtils --> TaskServiceImpl

图表来源

性能考虑

  • 批量查询优化:任务页面查询中对设备统计进行批量处理,避免N+1查询。
  • 缓存策略:任务详情与区域关系使用Redis缓存,减少数据库压力。
  • 异步与限流:通过本地阻塞队列与拒绝策略控制峰值流量,防止系统过载。
  • IO与网络:文件下载支持重定向,降低应用服务器带宽占用。

章节来源

故障排查指南

  • Redis Stream待处理消息:检查Pending队列与消费者组状态,确认超时阈值与重投逻辑。
  • Kafka反序列化异常:关注反序列化错误日志,确认消息格式与消费者版本兼容性。
  • 任务状态异常:核对主表与子表生效状态一致性,必要时触发状态检查流程。
  • 链路追踪:异常发生时查看Span中的错误标签与堆栈信息,定位问题根因。

章节来源

结论

本任务分发系统以任务域服务为核心,结合规则引擎、消息中间件、定时任务与监控链路,实现了高可用、可扩展的任务调度与分发能力。通过Redis缓存、批量查询优化、本地队列兜底与拒绝策略,系统在高并发场景下仍能保持稳定与可观测性。建议持续完善规则匹配的可视化配置与动态调整机制,进一步提升业务灵活性与运维效率。

附录

  • 数据库表结构
    • 定时任务表:包含任务名称、状态、处理器、CRON表达式、重试次数与间隔、监控超时等字段。
    • 定时任务日志表:记录任务执行时间、耗时、状态与结果数据。
  • 设备MAC类型:定义设备类型枚举,便于后续差异化处理。

章节来源

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答