问题描述
我想定期查询外部系统(在我的情况下为 DNS 服务器)以获取一些信息,直至达到某个最大重试次数。如果执行此数量的重试没有成功,如何反应?
现在有关我迄今为止编程的设置的更多详细信息:
在 Camunda BPM 引擎中,我配置了一个外部任务,它的主题由 Java 程序订阅。该程序执行检查(针对 DNS 服务器)。如果此检查成功,则任务被标记为已完成:
externalTaskService.complete(externalTask);
否则设置递减重试计数器失败(连同重试超时):
externalTaskService.handleFailure(externalTask,"Failure","[More failure details]",decrementedRetries,RETRY_TIMEOUT_MILLIS);
在吞下所有重试 (decrementedRetries == 0
) 后,外部任务在 Camunda BPM 引擎中用红色标志标记,说明失败任务执行的数量等。
现在我想模拟另一个任务来应对这种情况(补偿步骤的执行)。您建议如何模拟触发此任务?
我尝试应用从第一个任务指向补偿第二个任务的条件流,但没有找到任何提示如何配置此条件流实例以仅对带有 {{ 的任务实例做出反应1}}。
谢谢
基督徒
解决方法
事件(“红色标志”)表示技术错误,一旦根本问题得到解决,可以通过增加重试次数来解决。
在处理任务过程中发生的应该通过流程模型处理的问题可以用数据或事件来处理,例如通过 BPMN 错误或升级事件进行通信。
多种选择:
- 任务工作者的返回值:返回一个数据(例如错误代码)并在表达式中检查它,在任务之后留下一个基于数据的独占网关
- BPMN 错误:handleBpmnError (https://camunda.com/blog/2020/10/more-from-camunda-bpm-java-external-task-client-bpm-assert/) 返回 BPMN2 标准为其提供事件的特定错误。将捕获 BPMN 错误边界事件附加到您的任务并将其连接到响应任务。
- 升级:类似于 BPMN 错误,但也可以是不间断的。抛出升级事件,附加边界事件并连接到反应任务 (https://docs.camunda.org/manual/latest/reference/bpmn20/events/escalation-events/)
- 基于事件的子流程:还可用于定义事件处理程序并路由到您的反应任务
- 条件事件:为错误设置数据并在捕获条件事件中观察它。然后在条件事件中做出反应