BPM 中的中间事件或计时器
Intermediate event or timer in BPM
我在 BPMN2.0 图表中有 2 个独立的同步 "service tasks" - "Action 1" 和 "Action 2"。
成功执行 "Action 1" 后,预计会发生外部事件(BPM 引擎管理的系统外部的某些操作)。事件发生后,"Action 2" 应该立即执行(同样,同步服务任务)。
对我来说复杂的部分是如何为事件定义超时,这意味着事件是预期的,但只有一段时间(例如 1 分钟)...之后,应该执行一些超时错误处理。
因此操作 2 应在操作 1 之后的 0 到 60 秒范围内尽快执行,或者根本不执行。
知道如何在不使用异步任务的情况下实现这一点吗(见第二张图片)?
我有一些想法(第三张图片),但我不确定它是否会按预期工作...
图表将在 Activiti BPM 引擎中执行...
同步执行
异步执行
建议的解决方案
您在操作 1 和 2 之间需要的是 'receive task':参见 http://activiti.org/userguide/index.html#bpmnReceiveTask。除非完成 API 调用(v5 中的 runtimeService.signal,v6 中的 runtimeService.trigger),否则引擎不会继续。添加定时器边界事件(如第三张图),以确保进程实例化
您可以使用 EventBasedGateway
,它会等到收到消息或一分钟后计时器触发。根据事件,将使用相应的序列流并执行下一个 activity。
有关 EventBasedGateway
的更多信息,请参阅 documenation。
另一种选择是将消息接收事件和操作 2 包装在具有边界计时器事件的嵌入式子流程中
我在 BPMN2.0 图表中有 2 个独立的同步 "service tasks" - "Action 1" 和 "Action 2"。
成功执行 "Action 1" 后,预计会发生外部事件(BPM 引擎管理的系统外部的某些操作)。事件发生后,"Action 2" 应该立即执行(同样,同步服务任务)。
对我来说复杂的部分是如何为事件定义超时,这意味着事件是预期的,但只有一段时间(例如 1 分钟)...之后,应该执行一些超时错误处理。
因此操作 2 应在操作 1 之后的 0 到 60 秒范围内尽快执行,或者根本不执行。
知道如何在不使用异步任务的情况下实现这一点吗(见第二张图片)?
我有一些想法(第三张图片),但我不确定它是否会按预期工作...
图表将在 Activiti BPM 引擎中执行...
同步执行
异步执行
建议的解决方案
您在操作 1 和 2 之间需要的是 'receive task':参见 http://activiti.org/userguide/index.html#bpmnReceiveTask。除非完成 API 调用(v5 中的 runtimeService.signal,v6 中的 runtimeService.trigger),否则引擎不会继续。添加定时器边界事件(如第三张图),以确保进程实例化
您可以使用 EventBasedGateway
,它会等到收到消息或一分钟后计时器触发。根据事件,将使用相应的序列流并执行下一个 activity。
有关 EventBasedGateway
的更多信息,请参阅 documenation。
另一种选择是将消息接收事件和操作 2 包装在具有边界计时器事件的嵌入式子流程中