Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MismatchingMessageCorrelationException :无法关联消息‘onEventReceiver’:没有与参数匹配的过程定义或执行

MismatchingMessageCorrelationException :无法关联消息‘onEventReceiver’:没有与参数匹配的过程定义或执行
EN

Stack Overflow用户
提问于 2020-12-11 20:21:27
回答 1查看 1.3K关注 0票数 2

在某些情况下,我们面临接收任务的MismatchingMessageCorrelationException (低于5%)

通知接收任务的回调通过以下方式完成:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected void respondToCallWorker(
                    @NonNull final String correlationId,
                    final CallWorkerResultKeys result,
                    @Nullable final Map<String, Object> variables
    ) {
        try {
        runtimeService.createMessageCorrelation("callWorkerConsumer")
                      .processInstanceId(correlationId)
                      .setVariables(variables)
                      .setVariable("callStatus", result.toString())
                      .correlateWithResult();

        } catch(Exception e) {
            e.printStackTrace();
        }
    }

当我检查日志时:我发现执行的查询是这样的:

select distinct RES.* from ACT_RU_EXECUTION RES inner join ACT_RE_PROCDEF P on RES.PROC_DEF_ID_ = P.ID_ where RES.PROC_INST_ID_ = 'b2362197-3bea-11eb-a150-9e4bf0efd6d0‘and RES.SUSPENSION_STATE_ = '1’and exists (select ID_ from ACT_RU_EVENT_SUBSCR EVT WHERE EVT.EXECUTION_ID_ = RES.ID_ and EVT.EVENT_TYPE_ = 'message‘and EVT.EVENT_NAME_ = 'callWorkerConsumer’)

有时,当我在数据库中查找该进程的实例时,我发现它在接收任务中等待

SELECT DISTINCT * FROM ACT_RU_EXECUTION RES WHERE id_ = 'b2362197-3bea-11eb-a150-9e4bf0efd6d0‘

但是,当我检查订阅事件时,它还没有在数据库中创建

从ACT_RU_EVENT_SUBSCR EVT中选择ID_,其中EVT.EXECUTION_ID_ = 'b2362197-3bea-11eb-a150-9e4bf0efd6d0‘,EVT.EVENT_TYPE_ = 'message’,EVT.EVENT_NAME_ = 'callWorkerConsumer‘

我认为解决方案是在获得respondToCallWorker的响应之前保存“接收任务”,但遗憾的是我不能解决这个问题。

我尝试了“异步之前”callWorker和“消息消费者”,但它不起作用,我也尝试camunda.bpm.database.jdbc-batch-processing=false和得到相同的结果,我也尝试并行分支,但我得到OptimisticLocak异常和MismatchingMessageCorrelationException

也许我做错了

谢谢你的帮忙

EN

回答 1

Stack Overflow用户

发布于 2020-12-14 17:41:01

这是一个有趣的问题。正如您已经发现的,当您尝试在主进程结束其事务之前关联来自"worker“的结果时,就会发生错误,因此在关联时没有注册消息订阅。

这篇blog post对流程编排中的这个问题进行了描述和分析,绝对值得一读。

从这篇文章中可以看出,下面的设计应该可以解决这个问题:

您将消息发送和接收并行化,并在发送任务之前放置异步。这样,发送事件和消息订阅的异步继续作业将写入同一事务中,因此当执行异步消息发送时,订阅已在等待。

虽然这应该可以在BPMN模型级别上解决问题,但考虑不需要重塑流程的选项可能是值得的。首先,你可以发布一个"CallWorkerCommand“(简单的pojo)并在一个spring bean上使用一个TransactionalEventLister来执行实际的调用,而不是直接从你的委托调用worker。通过这样做,您首先将通过订阅消息来完成BPMN流程,然后,spring将执行您的worker调用。其次:您可以在关联消息调用周围使用resilience4j之类的重试机制,因此在极少数情况下,结果很快就会出来,您会失败,并在一秒钟后重试。

我能想到的另一种解决方案是,既然您在这里使用的是“外部worker”模式,那么就是直接使用外部任务服务任务,这样发送/接收同步就可以由Camunda外部worker API解决。

有这么多选择可供选择。我可能更喜欢外部任务,然后是transactionalEventListener,但这是个人喜好的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65258112

复制
相关文章
不定义大量的消息宏实现事件与处理关联起来(避免写很多消息宏定义和消息映射)
标题也许不恰当,不必在意。本文主要是记录一种 消息(事件)==》消息响应(事件处理)的映射方式,避免使用大量的消息宏定义。
大菊观
2019/08/14
6720
Postman关联与参数化
在周三的测试运维试听课程中,芒果给大家我们常用的接口测试工具Postman的进阶用法,这里我们来做个小总结。
TestOps
2022/04/07
6780
Postman关联与参数化
Rafy 框架 - 执行SQL或存储过程
有时候,开发者不想通过实体来操作数据库,而是希望通过 SQL 语句或存储过程来直接访问数据库。Rafy 也提供了一组 API 来方便实现这类需求。 IDbAccesser 接口 为了尽量屏蔽各数据库中 SQL 语句参数的不同标识,同时也为了使开发者更简单地实现参数化的查询。Rafy 中提供了 IDbAccesser 接口来方便开发者使用。接口定义如下: /// <summary> /// A db accesser which can use formatted sql to communicate wit
用户1172223
2018/01/29
8710
ls: 无法访问/usr/sbin/smartctl: 没有那个文件或目录
环境:RHEL6.5 + Oracle 11.2.0.4 RAC 在安装RAC时,检查时缺少包 cvuqdisk-1.0.9-1,oracle提供脚本修复安装。 但在执行时报错:
Alfred Zhao
2019/05/24
2.2K0
mysql如何执行关联查询与优化
在数据库中执行查询(select)在我们工作中是非常常见的,工作中离不开CRUD,在执行查询(select)时,多表关联也非常常见,我们用的也比较多,那么mysql内部是如何执行关联查询的呢?它又做了哪些优化呢?今天我们就来揭开mysql关联查询的神秘面纱。
小忽悠
2018/09/04
3.3K0
mysql如何执行关联查询与优化
VFP的过程或函数如何接收数组参数或返回一数组结果?
这里要注意二个方面,1、过程或函数中,必须定义一个全局数据 public ,2、RETURN 必须加@,这个小老鼠。也是地址引用返回值。
加菲猫的VFP
2021/08/12
3.3K0
数字逻辑中的与或非异或的运算规律_执行逻辑与或非运算
计算机中的逻辑运算又被称作为“布尔运算”,分别为:逻辑与运算、逻辑或运算,逻辑非运算,“逻辑异或运算。此外在门电路中还有:同或运算、与非运算、或非运算。共七种。
全栈程序员站长
2022/11/08
6.2K0
ExecuteReader在执行有输出参数的存储过程时拿不到输出参数
异常处理汇总-后端系列 http://www.cnblogs.com/dunitian/p/4523006.html 后期会在博客首发更新:http://dnt.dkill.net/Article/D
逸鹏
2018/04/10
1.3K0
ExecuteReader在执行有输出参数的存储过程时拿不到输出参数
C语言有参数宏定义与无参数宏定义
前两天上课,被JAVA老师问懵了,老师问:“你们学C语言,有没有写过带参的宏玩一玩”,说实话,我根本没听过什么带参的宏,我只用过宏定义,所以我下来一定要找个时间把这“带参的宏搞懂”,于是就有了这篇文章。        C语言中宏定义分两种,无参的宏和有参的宏 1.无参数的宏        无参数宏定义的一般形式为: #define name value//name是你起的名字,就跟起函数名一样,value是你要给这个名字赋予什么值 //示例: #include <iostream> using name
mathor
2018/06/22
2.9K0
Python编程 函数的定义与参数
函数 只有在调用时才会执行,通过 function_name(param) 进行调用
网络豆
2023/10/15
1870
Python编程 函数的定义与参数
Python编程 函数的定义与参数
函数 只有在调用时才会执行,通过 function_name(param) 进行调用
网络豆
2023/10/15
1600
Python编程 函数的定义与参数
VGA分辨率无法识别或错误通过添加自定义配置参数正确显示(Ubuntu/Windows)
VGA线比较古老了,但是应用最广,时常也会遇到各种问题,这里以1920*1080显示为例说明。
zhangrelay
2019/01/23
2.4K0
命令执行的过程
1)用户在命令行输入命令,敲下回车 2)系统判断输入的这个命令是否存在别名 3)存在别名,解析别名,按照别名里面的实际命令来进行下述操作 4)从用户的PATH变量里面设置的路径来查找命令。 5)如果能找到命令,然后开始判断权限,有权限执行这个命令,则执行返回执行结果,如果没有权限则提示相应的信息(每个命令提水的可能不一样) 6)如果没找到命令就提示" -bash: ifha: command not found" )
张琳兮
2018/09/10
5570
命令执行的过程
C++中自定义结构体或类作为关联容器的键
STL中像set和map这样的容器是通过红黑树来实现的,插入到容器中的对象是顺序存放的,采用这样的方式是非常便于查找的,查找效率能够达到O(log n)。所以如果有查找数据的需求,可以采用set或者map。
charlee44
2020/03/19
2.2K0
IS无法启动提示“服务没有及时响应启动或控制请求”的解决方法
  IIS无法启动提示“服务没有及时响应启动或控制请求”的解决方法,于是,从控制面板的中打开“管理工具”-“服务”,检查发现和IIS相关的服务“
会长君
2023/04/26
9550
绝对干货:自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程。 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品。当用户选择了三个产品时,如果分别显示这三个产品的安装交互UI显然是不恰当的。我们期望用一个统一的自定义UI去取代每个产品各自的UI。 平时使用msiexec.exe习惯了,所以最直接的想法就是在一个子进程中执行:     msiexec.exe /qn 这样固然是能够完成任务,但是不是太简陋了? 安装开始后我们想取消这次安装怎么办? 或者我们还想要拿到一
葡萄城控件
2018/01/10
2K0
绝对干货:自定义msi安装包的执行过程
httprunner-处理参数关联的接口
在实际工作中,我们经常遇到前一个接口返回的值当做下一个接口的参数进行请求。例如token,用过jmeter和postman的同学应该知道设置一个中间变量来接收token,在下个接口调用就可以了。下面给大家介绍下如何用httprunner中extrac赋值。
wencheng
2020/12/29
8293
httprunner-处理参数关联的接口
js解决setTimeout与setInterval无法传入参数的问题
将setTimeout与setInterval单独封装到一个函数中,例如:、 function delayJumpUrl(href){ setTimeout(function(){ jlocation.href=href; },2500); } setInterval也与这种方法类似
93年的老男孩
2019/12/18
1.4K0
WINDOWS7资源管理器不能打开, 该文件没有与之关联的程序来执行操作
点击导入注册表。Win7下亲测成功!但是导入以后,右键“计算机”弹出菜单会多“Opennewprocess”“opennewwindow”两个项,不完美。后来再论坛里面找到这样的方法,将如下的内容导入到注册表中:
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.7K1
linux命令chmod 777_chmod无法访问 没有那个文件或目录
一个Linux目录或者文件,都会有一个所有者、所属组和其他用户。所有者是指文件的拥有者,而所属组指的是这个文件属于哪一个用户组。 例如:test的文件的所有者是user0,而test1文件的所有者是user1,那么user1很有可能是不能查看test文件的,相应地,user0也很有可能不能查看test1文件(之所以说的是可能,是因为user0和user1可能属于同一个用户组,而恰好这个用户组对这个两个文件有查看权限)。
全栈程序员站长
2022/09/27
9.1K0
linux命令chmod 777_chmod无法访问 没有那个文件或目录

相似问题

bltoolkit与存储过程执行的关联

23

错误消息‘过程没有参数’

11

无法执行,没有命名参数匹配。

11

在中没有显示“执行存储过程”或“脚本存储过程”的可选参数的存储过程

11

无法使用多个参数执行过程

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文