部分数据流不允许使用相同业务参数重复运行。例如,同一期间、同一组织的取数或写入流程重复执行,可能造成数据翻倍;高频调度也可能在上一实例尚未完成时不断产生没有业务意义的新实例。
这类场景需要在进入业务逻辑前判断:相同参数的实例是否已经处于队列中或进行中。存在时停止当前实例,并告诉用户原实例由谁提交、到哪里查看。
在主业务节点前查询当前数据流的历史实例,取出实例状态、启动参数、提交人和实例 ID。将历史实例参数与当前实例参数标准化后比较,同时排除当前实例自身。
查询当前数据流实例
→ 解析并比较启动参数
→ 筛选 QUEUED / STARTED 且参数相同的其他实例
├─ 不存在 → 执行业务逻辑
└─ 存在 → 跳过业务逻辑并返回原实例信息
查询运行中的实例
调用 /monitor/runs 查询当前数据流实例,后续只保留 QUEUED、STARTED 状态,并通过 runId != Pipeline.run.run_id 排除当前实例。
比较启动参数
将历史实例的 runParam 和当前 Pipeline.params 转换为相同的键值结构,按 key 排序后比较,避免参数排列顺序不同造成误判。实际项目也可以只选取期间、组织、版本等业务唯一键,不必比较全部启动参数。
配置条件分支
没有匹配实例时进入业务节点;存在匹配实例时直接返回失败提示,并带出原实例的提交人和 runId。
在 UX 中展示结果
UX 同步调用数据流并展示返回提示,同时用 runId 拼接实例详情链接,方便用户查看正在运行的原实例。

配置完成后,相同参数在原实例完成前不会再次进入业务逻辑;参数不同或原实例已经结束时可以正常运行。该方案属于流程前置校验,不是原子并发锁;对重复写入会造成不可逆影响的业务,还应在写入端增加唯一约束、幂等校验或原子锁。
回到顶部
咨询热线
