但是,如何在最终事件到来时停止循环事件?
How to stop looping through events when the final event comes though?
我对 BPMN 2.0 (Camunda) 的世界还很陌生。我需要为一个非常复杂的工作流程建模,如下所述。非常感谢任何帮助!
单个进程有一个"event loop"从外部系统捕获任务事件,然后将任务异步提交给外部系统执行,并通过POSTrest回调等待其完成状态机制。在收到标记任务列表结束的特定消息之前,可以输入任意数量的此类任务事件。此时主进程应该检查是否所有异步提交的任务都已经完成或者等待还有运行个任务完成。如果任何任务失败,则整个过程应标记为失败。
可以使用activiti的接收任务来实现。
http://www.activiti.org/userguide/#bpmnReceiveTask
我遇到过类似的情况,在我的工作流程中我们不得不等待来自外部应用程序的输入。您可以使用等待任务,然后当您收到该数据时,您必须明确发出该任务的信号,以便执行进入下一阶段。
这个场景与我们在我们的一位客户身上实施的场景非常相似。
但是,您需要以不同的方式思考问题。
Camunda 或它的前身引擎 (Activiti) 都没有能力处理我喜欢用术语 "durable" 消息表示的内容。
"durable" 消息会一直存在于引擎中,直到引擎出现并寻找它为止。通常,如果您使用的是 pub/sob 消息平台,例如 JMS,这不是问题。但是,如果您通过 tcp 通过 http 进行通信,那么这可能会很麻烦,因为 MESSAGES 可能是 MISSED/LOST.
因此,我假设(根据您的描述)您计划在 tcp 上使用 http。
因此,为了确保您不会丢失消息,您需要放弃 "loop" 范例。使用循环,您不能保证流程实例会在消息传入时等待接收任务。
因此,与其使用循环,不如考虑由消息启动事件触发的单个 "instance" 进程,消息启动事件将包含一个业务数据键,充当相关实例。
基本流程如下:
注意流程很简单,接收消息,进行异步调用,等待成功消息,然后结束。
有一个决策网关可以确定传入消息是否是列表任务的结尾。如果检测到这种情况,我们将分支,使用相同的相关键查询活动实例并等待实例失败或完成。如果完成,则最终任务流程实例完成并更新适当的审计跟踪。
如果实例完成后出现任何失败,则 "final task" 实例会处理错误情况。
我对 BPMN 2.0 (Camunda) 的世界还很陌生。我需要为一个非常复杂的工作流程建模,如下所述。非常感谢任何帮助!
单个进程有一个"event loop"从外部系统捕获任务事件,然后将任务异步提交给外部系统执行,并通过POSTrest回调等待其完成状态机制。在收到标记任务列表结束的特定消息之前,可以输入任意数量的此类任务事件。此时主进程应该检查是否所有异步提交的任务都已经完成或者等待还有运行个任务完成。如果任何任务失败,则整个过程应标记为失败。
可以使用activiti的接收任务来实现。
http://www.activiti.org/userguide/#bpmnReceiveTask
我遇到过类似的情况,在我的工作流程中我们不得不等待来自外部应用程序的输入。您可以使用等待任务,然后当您收到该数据时,您必须明确发出该任务的信号,以便执行进入下一阶段。
这个场景与我们在我们的一位客户身上实施的场景非常相似。
但是,您需要以不同的方式思考问题。 Camunda 或它的前身引擎 (Activiti) 都没有能力处理我喜欢用术语 "durable" 消息表示的内容。 "durable" 消息会一直存在于引擎中,直到引擎出现并寻找它为止。通常,如果您使用的是 pub/sob 消息平台,例如 JMS,这不是问题。但是,如果您通过 tcp 通过 http 进行通信,那么这可能会很麻烦,因为 MESSAGES 可能是 MISSED/LOST.
因此,我假设(根据您的描述)您计划在 tcp 上使用 http。
因此,为了确保您不会丢失消息,您需要放弃 "loop" 范例。使用循环,您不能保证流程实例会在消息传入时等待接收任务。
因此,与其使用循环,不如考虑由消息启动事件触发的单个 "instance" 进程,消息启动事件将包含一个业务数据键,充当相关实例。
基本流程如下:
注意流程很简单,接收消息,进行异步调用,等待成功消息,然后结束。
有一个决策网关可以确定传入消息是否是列表任务的结尾。如果检测到这种情况,我们将分支,使用相同的相关键查询活动实例并等待实例失败或完成。如果完成,则最终任务流程实例完成并更新适当的审计跟踪。
如果实例完成后出现任何失败,则 "final task" 实例会处理错误情况。