创建和管理队列触发器,以便根据队列活动自动启动作业
- 您可以为队列创建一个队列触发器。 这也适用于共享到多个文件夹的队列。
- 触发器时区:在触发器上设置的时区不受租户时区的限制。但是,如果您使用非工作日日历,则无法设置不同的时区。 队列触发器根据在触发器级别定义的时区启动。 队列触发器会基于队列项目处理而启动。 基于触发器时区禁用队列触发器。
队列触发器在创建触发器后或将新项目添加到队列中时立即启动流程。触发器在与所选流程关联的环境中运行。
队列触发器的实现针对使用具有内部循环的流程进行了优化,以便在退出之前处理所有可用的队列项目。如果流程不实施此策略,则不会产生最佳体验,并且可能无法满足所需的业务要求。
有以下三个选项可帮助您参数化流程触发的规则:
| 描述 | |
|---|---|
| 触发第一个作业的最小项目数 | 项目处理作业仅在目标队列中具有至少此数量的新项目之后才开始。延迟的队列项目不计算在内。 |
| 允许同时等待和运行的最大作业数 | 允许的待处理作业和正在运行的作业的最大数量(一起计算)。对于同时允许的 2 个或多个作业,需要按如下所述定义第三个选项。 |
| 每 __ 个新项目触发另一个作业。 | 触发新作业的新项目的数量(在为第一个选项定义的项目数的基础上增加)。 仅在允许同时两个或更多作业(使用上述选项定义)时启用。 |
为了处理在加入队列时无法处理的队列项目(包括重试项目),默认情况下每 30 分钟执行一次未处理项目检查,如果满足触发条件,则会再次启动触发器。
您可以使用Queue.ProcessActivationSchedule参数来调整默认检查间隔(30 分钟)。请注意,更改Queue.ProcessActivationSchedule的值不会立即影响正在进行的现有队列项目。更改将在更新队列触发器后生效。
此检查可确保在以下情况下队列中的所有项目都能得到处理:
- 队列项目添加到队列的速度比使用可用资源处理队列项目的速度要快得多。
- 队列项目是在非工作日添加到队列中的,但是只能在工作时间进行处理。
- 队列项目处理将推迟到以后的时间。经过这段时间后,一旦经过 30 分钟的检查确定,便可以对其进行处理。
备注:
默认检查时间为 30 分钟,因此在非工作时间存在资源阻塞的风险。为避免这种情况,请确保在工作日结束时没有未处理的项目。如果不可能,请确保触发的流程不需要人工干预。
队列触发器处理算法
算法中使用的数字
- 队列中可用的新队列项目数:N
- 触发第一个作业所需的最少项目数:x
- 这意味着至少需要 x 个新项目,我们才能触发作业。
- 允许同时等待和运行的最大作业数:y
- 这意味着我们可以为允许的并行作业数量设置一个上限 (y)。
- 每 __ 个新项目触发另一个作业:z
- 这意味着,如果达到 x,则系统会启动 1 个作业。对于剩余的 N-x 个队列项目,我们将尝试启动 (N-x)/z 个作业。如果这个数量超过 y,我们将创造出足够多的作业来达到总量 y。
在评估可以创建多少其他作业时,我们会考虑当前正在运行的作业量 (w)。根据“触发器 - 队列触发器 - 启用待处理作业策略”设置,可按如下方式计算此数字:
- True - 根据新可用的队列项目创建的附加作业数量上限 = y 减去处于“待处理”状态的作业数。(此选项最适合您希望 Orchestrator 假定所有正在运行的作业已将队列项目移出状态“新建”的情况。)
- False - 根据新可用的队列项目创建的其他作业数量上限 = y 减去处于以下状态之一的作业数:待处理、已恢复、正在运行、正在停止、正在终止。(此选项最适合您希望 Orchestrator 假定所有正在运行的作业尚未将队列项目移出状态“新建”的情况。)
重要提示
- 每当添加单个队列项目(包括通过批量添加)时,都会发生此评估。
- 为确保将已推迟(延迟)的队列项目考虑在内,每个队列触发器都有一个关联的计划,该计划将重新检查上述整个算法。默认情况下,此操作每 30 分钟进行一次,但可以通过“队列 - 未处理的队列项目检查频率(分钟)”租户设置将其减少到至少 10 分钟。
- 从历史上看,它旨在确保在达到阈值后启动作业,并且在超过该阈值时启动其他作业,以帮助处理增加的积压。这并不意味着在潜在的计算机上均匀分配工作负载,而只是为了确保存在足够的作业。
- 已启动的作业与启动它们的队列项目之间没有硬链接,这意味着作业 J 不一定要处理队列项目 a、b、c 等。
- 根据是批量添加还是单独添加队列项目,算法结果会有所不同,因为这会影响所执行的评估次数。
- “截止日期”非常适用于对具有相似优先级的任务进行排序,而“延期”可确保不会在指定的时间之前启动任务。但是,这两个参数不可一起使用。
示例
场景 1 - 单独添加的队列项目
我有两个作业:
- 其中一个作业会在 20 秒内每秒向目标队列添加 3 个项目(共 60 个项目)。
- 另一个作业会每秒处理目标队列中的 1 个项目。
我已将触发器定义如下:
- “触发第一个作业的最小项目数”:
31。 - “允许同时等待和运行的最大作业数”:
3。 - 每
10个新项目触发另一个作业。
我启动向队列添加项目的作业。
- 11 秒(33 个项目)后,将触发第一个项目处理作业。
- 再过 4 秒(12 个项目)后,将触发第二个项目处理作业。
- 再过 4 秒(12 个项目)后,将触发第三个项目处理作业。
直到结束添加队列项目时,第一个作业已处理 9 个项目,第二个作业已处理 5 个项目,第三个作业已处理 1 个项目。也就是说,三个作业在 20 秒内处理了 15 个项目。
这意味着剩余 45 个(60-15)项目待处理。有 3 个作业,每个作业每秒处理 1 个项目,这意味着需要 15 秒才能处理剩余项目,因此总共需要 35 秒。
场景 2 - 批量添加队列项目
如果通过一次批量操作(没有正在运行或待处理的作业)添加上述场景中提到的 60 个队列项目,则系统将创建 3 个作业。
如果至少一个作业在重新评估计划之前完成,则系统会进一步创建更多作业。
执行目标
您可以配置多个规则,具体取决于执行哪些关联的流程。
| 描述 | |
|---|---|
| 帐户 | The process is executed under a specific account. Specifying only the account results in Orchestrator allocating the machine dynamically. Specifying both the account and the machine template means the job launches on that very account-machine pair. |
| 计算机 | The process is executed on one of the host machines attached to the selected machine template. Specifying only the machine template results in Orchestrator allocating the account dynamically. Specifying both the account and the machine template means the job launches on that very account-machine pair. 注意:确保将执行作业所需的运行时许可证分配给关联的计算机模板。 |
| 主机名 | 主机名 选择计算机模板后,系统将显示“主机名”选项,允许您选择所需的工作站/机器人会话以执行流程。 系统将显示活动文件夹中的所有可用会话,包括未连接、已断开连接或已连接的会话。 注意:确保将执行作业所需的运行时许可证分配给关联的计算机模板。 |
使用 UiPath 活动创建的队列触发器
RPA Developer 也可以在 Studio 的设计时中使用 UiPath.Core.Activities 包的“将新项目添加到队列时”活动创建队列触发器。
Orchestrator 将这些类型的触发器标识为包要求,通过“包要求”页面完成相关操作是在 Orchestrator 中添加这些触发器的唯一方法。
在设计时设置的任何配置都会反映在 Orchestrator 中,并且无法修改。
例如:将队列项目添加到队列时,我希望以日志消息的形式接收其元数据。此处的区别在于,队列触发器指示自动化从工作流内部开始,而 Orchestrator 队列触发器指示自动化从工作流外部开始。