zeebe作业人员
作业人员
作业人员是能够执行工作流中特定步骤的组件。
什么是作业?
作业是工作流中的工作项。例如:
- 处理付款
- 生成PDF文档
- 在后端系统中更新客户数据
作业具有以下属性:
- 类型:描述工作项,并在工作流的每个任务中定义。工作者引用该类型以请求他们能够执行的工作。
- 变量:工作人员执行工作所需的工作流实例的上下文/业务数据。
- 自定义标题:工作流程中定义的其他静态元数据。通常用于配置用于多个工作流程步骤的工作程序。
向代理索取作业
作业人员每隔一定的时间间隔(即轮询)向代理请求某种类型的作业。此间隔和请求的作业数可以在Zeebe客户端中配置。
如果有一个或多个所请求类型的作业可用,则代理会将激活的作业流式传输给工作人员。接收到作业后,工作人员将执行这些作业,并 根据作业是否可以成功完成来发送每个作业的完成或失败消息。
例如,下面的工作流可能产生三种不同类型的作业:process-payment
,fetch-items
和ship-parcel
:
三种不同的作业人员,每种工作人员各一种,可以向Zeebe申请工作:
许多工人可以请求相同的工作类型,以扩大处理规模。在这种情况下,代理确保将每个作业仅发送给其中一个工人。在作业完成,失败或作业激活超时之前,该作业被视为已激活。
在请求作业时,可以设置以下属性:
- 工作者:工作者的标识符。用于审计目的。
- 超时:将工作分配给工人的时间。如果作业在这段时间内未完成,则可以再次要求工人提出。
- MaxJobsToActivate:此请求应激活的最大作业数。
- FetchVariables:所需变量名称的列表。如果列表为空,则请求工作流实例的所有变量。
长时间轮询
如果没有可用的作业,可以立即完成作业请求。为了找到要处理的工作,工作人员现在需要再次轮询可用的工作。这导致工人重复发送请求直到有工作可用的情况。就资源使用而言,这是昂贵的,因为客户端和服务器都执行大量非生产性的工作。为了更好地利用资源,Zeebe可以对可用的工作进行长时间的轮询。
随着长轮询启用后,当没有可用的工作请求将保持开放。当至少一项作业可用时或在指定的持续时间之后,该请求完成。工作人员还可以将RequestTimeout指定为保持请求打开的持续时间。默认请求超时为10秒,但也可以在客户端中配置。可以使用配置标志gateway.longPolling.enabled
或环境变量禁用对可用作业的长时间轮询 ZEEBE_GATEWAY_LONGPOLLING_ENABLED
。默认情况下启用。
作业排队
Zeebe将创建作业与执行作业分离开来。始终可以以尽可能高的速度创建工作,而不管是否有工人在工作。这是可能的,因为Zeebe将作业排队直到工人要求他们为止。如果当前没有作业工作者正在请求作业,则作业将保持排队状态。因为工人要求经纪人提供工作,所以工人可以控制接受新工作的速度。
这使代理可以处理突发流量,并有效地充当作业人员面前的缓冲区。
完成和失败的作业
处理激活的作业后,作业人员可以通知代理该作业已完成或失败。如果作业工作者可以成功完成其工作,则可以通过发送完整的作业命令将该成功通知给代理。如果无法在配置的作业激活超时内完成作业,则代理将使该作业可再次供其他作业工作者使用。
为了公开作业的结果,作业工人可以使用完整的作业命令传递变量。这些变量将根据输出变量映射合并到工作流实例中。请注意,这可能会覆盖现有变量,并可能导致并行流中的竞争条件。我们建议仅使用那些需要更改的变量来完成作业。
如果作业工作者无法成功完成其工作,则可以通过发送失败作业命令将该失败通知代理。失败作业命令包括剩余的重试次数。如果这是一个正数,则该作业将立即可以再次激活,并且工作人员可以尝试再次进行处理。但是,如果它是零或负数,则将引发一个事件,并且直到该事件解决后,才能激活该作业。
相关教程
- 2021-01-09
- 2021-01-09
- 2021-01-09
- 2021-01-09
- 2021-01-09
- 2020-12-22
- 2020-12-22
- 2020-12-22
- 2020-12-21
- 2020-12-19