按分组路由任务,并限制共享并发

将任务交给匹配Worker,再让两条任务串行使用同一个并发许可。

适用场景与读者

适合已完成快速入门、需要将该场景用于业务流程的配置人员。

开始前准备

先阅读教程公共准备。本页预计时间不含外部服务安装;命令中的资源、路径和端口按自己的演练环境填写。

资源 要求
集群 独立CLUSTER演练环境、受支持共享平台库和两个Worker;节点身份/数据目录独立。
脚本 两条 Windows LOCAL / POWERSHELL 任务;每条等待 6 秒并输出 UTC 开始、结束时间与 Worker 标识。

配置一览

界面字段 / 配置项 本例填写值
节点分组 Worker A=finance;Worker B=other
任务分组 任务A=finance;任务B=other
共享资源 docs-shared,上限1,启用

操作步骤

1. 配置并检查节点

按集群指南准备共享平台库和三个独立节点:管理节点承担 API、SCHEDULER、MAINTENANCE,两个 Worker 只承担 WORKER,分组分别为 finance 和 other。所有节点使用 CLUSTER、兼容的认证与安全配置、不同 instance-name 和独立数据目录。先启动首个节点,等待正式迁移完成并就绪,再启动其他节点;不要让多个节点同时首次初始化空平台库。确认 A/B 就绪且没有继承无关 ID 白名单。在 Worker A 的启动环境设置 IJOB_TUTORIAL_WORKER=finance,B 设置为 other,重启后让子进程继承;这是本教程自定义观察标记,不是平台路由配置。

2. 发布匹配任务

新增两个 SCRIPT 任务,执行方式 LOCAL、引擎 POWERSHELL、脚本与输出编码 UTF-8、超时 60 秒、重试次数与间隔 0。A/B 分别设置 finance/other 分组,使用相同脚本并保存发布:

$ErrorActionPreference = "Stop"
if ([string]::IsNullOrWhiteSpace($env:IJOB_TUTORIAL_WORKER)) { throw "Worker marker missing" }
Write-Output ("started=" + [DateTime]::UtcNow.ToString("o"))
Write-Output ("worker=" + $env:IJOB_TUTORIAL_WORKER)
Write-Output ("__VAR__:worker=" + $env:IJOB_TUTORIAL_WORKER)
Start-Sleep -Seconds 6
Write-Output ("finished=" + [DateTime]::UtcNow.ToString("o"))

分别执行,日志与输出变量 worker 应为 finance / other,并与实际领取节点一致。

3. 观察无共享限制的执行

先在并发管理确认 SCRIPT 插件容量至少为 2,A/B 的任务策略不额外串行限制,且尚未绑定共享许可。同时触发 A/B,核对两条 SUCCESS 运行的开始与结束时间:两个 6 秒执行区间应有重叠。若未重叠,先检查触发时间差、Worker 就绪和容量,再比较共享限制;触发受理本身不证明并行。

4. 绑定容量1的共享资源

待前两条执行结束,在并发管理创建docs-shared、上限1并启用,绑定到A/B两条任务。并发策略保存不发布任务定义版本。

5. 再次同时触发并检查互斥

同时触发A/B,查看一条执行、另一条等待许可;比较实际执行区间,结束时间应不与下一条开始时间重叠。不同节点也共享同一限制。

6. 理解不匹配与白名单

另用没有匹配Worker的专属分组任务观察排队,结束后为其提供匹配节点或按可用控制取消,不能留下无限等待。ID白名单限制根触发目标:仅任务列表非空时不接作业根,仅作业列表非空时不接独立任务根。

预期结果

检查项 预期值
路由 finance→A,other→B
未绑定共享许可 两条运行均 SUCCESS,执行区间重叠
共享容量 1 两条运行均 SUCCESS,执行区间不重叠;保持 finance / other 路由

常见失败

现象 处理方法
一直排队 依次查角色、分组、根目标白名单和各层并发许可;空节点分组不是匹配所有分组。

安全与清理

排空或取消练习触发,确认无活动工作再解除共享绑定、移除资源并恢复专属节点设置。

适用版本与限制

适用 iJob 1.0.0。示例覆盖独立 CLUSTER 的一个管理节点、两个 Windows Worker、按 finance / other 分组领取,以及共享容量 1 在两个 Worker 间串行执行;中英文配置得到相同结果。同宿主多进程不代表物理高可用;Linux 脚本、跨宿主故障接管与白名单组合不列为本页已确认的完整覆盖。

相关页面

文档版本 1.0.0。命令中的示例路径、资源和端口需替换为自己的环境。