提问者:小点点

可流转的相关catch事件发生在数据持久化之前


据我所知,当数据达到等待状态时,它会在Flowable中持久化。

在我们的流程中,我们有一个委托,它正在启动计算并记录ID以进行跟踪,并等待JMS消息重新启动流程,如下所示:

在“开始计算”委托中,我们有如下代码:

String id = calculationService.startCalculation().getId();

execution.setVariable(CORRELATION_KEY, id);

loggingService.updateCase(id);

此计算和此日志记录都需要一些时间。有时日志记录比计算花费更多时间——这意味着JMS消息在“开始计算”委托完成之前到达。

如果发生这种情况,相关性:

ProcessInstance instance = 
        this.runtimeService.createProcessInstanceQuery()
                .variableValueEquals(CORRELATION_KEY, correlationValue)
                .singleResult();

不会导致任何答案,并且该过程将无限期等待。大多数时候,当日志记录比计算快时,这不是问题。

我该如何解决这个问题,在委托完成之前,我还没有找到任何强制持久化变量的方法。我想我可以等一分钟,然后在MessageHandler类中重试,但是由于有许多JMS消息来了,但只有少数消息真正相关,我觉得这会引起不必要的噪音。

也许如果我将日志记录移动到它自己的委托,并为此使用一个包容性网关,catch事件将解决它。但希望有一个更优雅的解决方案。


共1个答案

匿名用户

我想你要找的是一个TriggerableServiceTask。这个任务实现了执行()和触发()方法,允许流程实例在外部系统响应后继续前进。查看这个解释和例子:从jms消息侦听器重新启动可流动的流程