Jbpm。异步工作项和重试

问题描述 投票:0回答:2

让我直接来看看用例。

我在我的过程中有很多工作项目说A,B,C。它以A--->B--->C顺序开始。

就我而言,B是对3rd party网络服务的调用。 C只有在B成功的情况下才能处理。如果对Web服务的调用失败,系统应在5 min之后重试。重试次数仅限于3

如何使用Jbpm6实现这一目标。

我从doc中理解的一些选项是,

1)我可以使用工作项处理程序。在工作项目内部,我将启动另一个将执行重试的线程,最后调用completeWrokItem()方法。但在这种情况下,我的进程引擎线程将不必要地等待completeWrokItem()调用。 2)我可以使用command进行重试。但是如果我调用command它将在另一个线程中执行,并且进程线程将执行C。这不是一种理想的方式

我如何创建一个进程,以便B将在后端执行并通知引擎它可以继续执行C

请指教。

提前致谢。

如果我的问题不够明确,请发表评论。

java drools jbpm bpmn
2个回答
1
投票

你的问题并不完全清楚;但是,我提供了一个答案,希望能提供一些清晰度:

  1. 对于异步执行,您应该遵循文档中的指导原则:JBMP 6.0 Async Documentation
  2. 给定您的流程流程,如果您使用命令和定义为的流程:A-> B-> C;在命令完成之前,C不会启动。
  3. 要使命令并行运行,可以使用并行分支。在下面的图片中,如果Script1和Script2是命令,它们将并行执行,而Email只会在两个脚本完成时执行:
  4. 只需从execute方法返回一个命令就完成了: public ExecutionResults execute(CommandContext ctx) throws Exception { // Set results if exist. Otherwise, return empty ExecutionResults. ExecutionResults results = new ExecutionResults(); // This would match the name of an output parameter for the work item. // results.setData("result", "result data"); logger.info("Command finished execution: " + this.getClass()); logger.debug("Results of executing command: ", results); return results; } `

0
投票

在节点B之后添加XOR网关,向节点B添加脚本并设置web服务的状态和retry_count(如果成功,status_b = true;如果失败,status_b = false和retry_count ++),

如果retry_count> = 3或status_b == true,XOR转到C,否则再次转到B.

© www.soinside.com 2019 - 2024. All rights reserved.