跳到主要内容

异步导出和事件归属

Task既是设备消息入口,也是通用导出任务登记服务。业务从Task接口进入,并不意味着所有数据都由Task持有;应按最后写入存储的消费者区分归属。

异步导出​

nebula_ids.base_export_task保存导出请求及执行状态。各业务服务通过ExportTaskApi登记请求,Task分配Redis并发槽位并发出ExportTaskEvent,有对应业务类型的监听者执行导出,再经API更新日志、进度和结果。Task本模块监听应用运行、活跃等导出类型;其他业务模块可消费自己的类型,不应将所有导出实现归入Task。

字段业务解释
type导出业务类型,用于路由到相应监听者
param该业务类型的查询条件序列化结果;不能认为所有任务共享同一JSON结构
status0启动、1手动终止、2完成、3失败、4排队等待
progress/log异步任务执行进度和过程说明
result最终文件结果地址,删除任务时通过infra文件API清理
creator/create_time/updater/update_time/deletedBaseDO继承的审计和逻辑删除字段

实库另有tenant_id,实体不直接声明;这是物理列与实体表示方式的区别,不能推断系统没有租户隔离。当前仅id主键索引,未设置状态队列专用索引。Redis槽位控制并发,库中WAITING记录由调度方法再尝试启动;这不等于MySQL事务和Kafka发送具备跨系统原子性,本次未做故障恢复验证。

设备事件的读写边界​

入口事件Task内动作最终存储归属说明
APP下载发app-download并由AppDownloadConsumer写入Task的遗留MySQL下载明细
任务推送回调发task-call-back,APP任务另发apk-push-callbackTask维护flow_task_device;其他消费者的历史数据由其所属服务维护
APP运行列表发app-runtime-list,消费者写TD热库并回填任务关联Task运行明细与统计
APP安装列表转换为AppInstallEventDTO后发app-install-listdevice服务后续处理;不因本入口在Task而将安装列表库归入Task
launcher广告回调发launcher-ad-callbacklauncher服务后续处理
黑名单操作/杀进程回调发相应black回调消息blacklist服务后续处理
设备运行记录发device-run-recorddevice服务后续处理
域名分发访问域名接口发TOPIC_DOMAIN_DEVICE_ACTIVITYdevice活跃链;独立于Task应用活跃链

这些是源码事件流证据,没有重放消息验证消费者运行状态。Topic名通过Kafka配置解析,文中以配置属性/常量标识,避免把某一环境名称当接口永恒约定。

非关系存储​

TaskRedisDAO按任务ID缓存主对象;TaskDeviceRedisDAO按MAC建Hash,field为taskId;UotaRedisDAO维护版本实体和渠道版本ZSet;BloomFilterRunner使用bloom:filter:task:push;导出组件维护运行槽位和任务UUID。它们用于减少读库、筛选与协调,不作为本次已实测的数据实体;没有连接Redis、列举用户数据或读取缓存值。

源码证据:service/export/BaseExportTaskServiceImpl.java:59、:133、:180、service/export/ExportTaskApiImpl.java:122、listener/TaskExportTaskEventListener.java:42、service/deviceevent/DeviceEventServiceImpl.java:80、dal/redis/task/TaskRedisDAO.java:17、dal/redis/task/TaskDeviceRedisDAO.java:23、dal/redis/task/BloomFilterRunner.java:14。状态枚举位于ik_project/yudao-cloud/yudao-module-task/yudao-module-task-api/src/main/java/cn/iocoder/yudao/module/task/enums/ExportTaskStatus.java:20。路径基准见总览,完整导出表见遗留库附录。

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