当前位置: 首页 > 知识库问答 >
问题:

CAMUNDA-Intermedia消息事件不能与单个执行相关联

高修伟
2023-03-14

我创建了一个小应用程序(Spring Boot和camunda)来处理订单流程。Order-Service通过Rest接收新订单,并调用BPMN order工作流的Start事件。订单流程包含两个异步JMS调用(客户检查和仓库库存检查)。如果两个检查都返回,则订单过程应该继续。

Start事件在Spring Rest控制器中调用:

     ProcessInstance processInstance =
             runtimeService.startProcessInstanceByKey("orderService", String.valueOf(order.getId()));

发送任务(例如客户检查)将JMS消息发送到异步队列中。这个服务的答案由另一个Spring组件捕获,然后trys发送一个中间消息:

     runtimeService.createMessageCorrelation("msgReceiveCheckCustomerCredibility")
             .processInstanceBusinessKey(response.getOrder().getBpmnBusinessKey())
             .setVariable("resultOrderCheckCustomterCredibility", response)
             .correlate();
  1115 06:33:08.564 WARN  [o.c.b.e.jobexecutor] ENGINE-14006 Exception while executing job  67d2cc24-0769-11ea-933a-d89ef3425300: 
  org.springframework.messaging.MessageHandlingException: nested exception is org.camunda.bpm.engine.MismatchingMessageCorrelationException: ENGINE-13031 Cannot correlate a message with name 'msgReceiveCheckCustomerCredibility' to a single execution. 4 executions match the correlation keys: CorrelationSet [businessKey=1, processInstanceId=null, processDefinitionId=null, correlationKeys=null, localCorrelationKeys=null, tenantId=null, isTenantIdSet=false]

共有1个答案

韩志专
2023-03-14

为了缩小问题:在尝试关联并检查实际正在等待的订阅之前,执行runtimeService eventSubscription查询…也许你有一个重复的消息名?也许您(意外地)有相同进程的另一个实例在运行?一旦您识别了订阅,您就可以直接通知执行,而无需使用相关生成器······

 类似资料:
  • 我正在尝试理解线程、处理程序、循环器。我看过视频,其中家伙说以下每个Android线程都与Looper(消息队列)相关联。所以这意味着当我创建Thread类实例时,它隐含地创建了它自己的连接到此线程的looper?还是这是错误的?Handler连接到创建它的线程,如果处理程序将发布消息的每个线程中没有looper?另一个问题是关于HandlerThread的。使用这个类的目的是什么,利弊是什么。希

  • 帐号被登出 当前用户登录失效、异地登录时,都会发送这个消息。 消息体 EventUserLoginInvalid 例子 Kolin @Subscribe(threadMode = ThreadMode.MAIN) public fun onReceivedUserEvent(eventUserLoginInvalid: EventUserLoginInvalid){ // TODO

  • 我正在尝试使用事件源概念为订单/交易流程开发微服务。员工可以通过电话为客户下单/交易。系统还记录按客户分组的订单数量。它使用AWS Kinesis将orderCreated事件中的客户id发送到客户数据服务,以便我们可以增加创建的订单数量。我们根据DDD概念将订单处理和客户分离。但是,当员工为订单选择错误的客户id时,我们应该预见到人为错误。因此,有一个功能可以更改相关订单的客户。 问题是orde

  • 7.3 导航相关消息 在导航功能包集中包含了诸多节点,毋庸置疑的,不同节点之间的通信使用到了消息中间件(数据载体),在上一节的实现中,这些消息已经在rviz中做了可视化处理,比如:地图、雷达、摄像头、里程计、路径规划...的相关消息在rviz中提供了相关组件,本节主要介绍这些消息的具体格式。

  • 主要内容:1. 什么是消息队列,2. 消息队列有哪些使用场景,3. 消息队列如何解决消息丢失问题,4. 消息队列如何保证消息的顺序性,5. 如何保证数据一致性,事务消息如何实现1. 什么是消息队列 你可以把消息队列理解为一个使用队列来通信的组件。它的本质,就是个转发器,包含发消息、存消息、消费消息的过程。最简单的消息队列模型如下: 我们通常说的消息队列,简称MQ(Message Queue),它其实就指消息中间件,当前业界比较流行的开源消息中间件包括:RabbitMQ、RocketMQ、Kafk

  • 我刚才看到了三个方法的文档,当我们在工作线程中工作时,它们可以用来在UI线程中执行一段代码。方法有: > public final void runOnUIThread(Runnable action)-在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列中 public boolean post(Runnable act