gpt4 book ai didi

spring - camunda 中的 Receivetask 未按预期工作

转载 作者:行者123 更新时间:2023-12-03 16:15:13 26 4
gpt4 key购买 nike

我们在大多数项目中一直使用 camunda 7.4 版本以及 camunda-bpm-spring-boot-starter 1.1.0。

我们有一个项目,在 camunda 流中,我们尝试将消息发布到消息代理,该消息在内部由另一个系统使用,并将新消息重新发布到同一个消息代理。然后我们触发一个 receiveTask 来接收该消息并进一步处理。为了收听传入的消息,我们使用 org.springframework.amqp.core.MessageListener 并在 onMessage() 方法中为 receiveTask 定义消息关联。但是我们这样做会遇到以下错误

org.camunda.bpm.engine.MismatchingMessageCorrelationException:无法关联消息“ReceiveAmsharedResponse”:没有流程定义或执行与参数匹配

我们试图找出问题出在哪里?是在我们使用的camunda 版本中还是问题出在receiveTask 的使用上。我们尝试了 https://docs.camunda.org/manual/7.4/reference/bpmn20/tasks/receive-task/ 中定义的所有方法但没有运气。

对于 createMessageCorrelation 方法,我们得到了上述错误。对于其他方法,我们得到一个 NPE,因为 EventSubscription/Execution 对象为空。

示例 Camunda 流接收任务用法如下:

 <bpmn2:receiveTask id="ReceiveTask" name="Receive Task" messageRef="Message_06nl07f">
<bpmn2:incoming>SequenceFlow_xyz</bpmn2:incoming>
<bpmn2:outgoing>SequenceFlow_190m9nx</bpmn2:outgoing>
</bpmn2:receiveTask>
......
......
<bpmn2:message id="Message_06nl07f" name="Message" />

和示例消息关联代码:
 class XYZ implements MessageListener {
onMessage() {
runtimeService.createMessageCorrelation("Message")
.processInstanceBusinessKey(resourceId)
.setVariable(ACTIVITY_RESULT, activityResult)
.correlate();
}

任何帮助,将不胜感激?

谢谢,
维斯瓦纳特

最佳答案

假设您的流程如下所示:

O -- ( M ) -- ( M ) -- O
send receive

如果响应消息发送非常快,可能是 onMessage并且在消息事件订阅持久化到数据库之前执行消息关联。基本上消息到达时发送任务仍在执行。

避免这种情况的一种方法是在发送事件的同时创建消息订阅:
O -- + -- ( M ) -- + -- O
| send |
`----( M ) --´
receive

关于spring - camunda 中的 Receivetask 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42761402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com