背景:
在某张开发的单据审核操作上增加了插件用于同步更新其他内容,由于多用户同时审核或在任务中心批量同意时会同时出发多次插件执行,跟新目标对象时出现错误。所以需要插件必须顺序执行,所以想到了使用消息队列。
在社区找到@sharkv 老师写的关于MQ开发的系列帖子学习之后摸索的写了插件;Idea启用测试成功。
问题:
往测试环境部署时出现了第一个问题,由于测试环境有其他人写的xml配置文件,按照社区的写法,在mc的公共配置里使用换行的方式同时配置了两个xml文件,
重启服务之后一些功能执行报错,经过排查在monitor中只找到了第一行的xml文件。需要调用第二个xml文件里配置消费者类的提示找不到。
反复对照社区说明并在微信群咨询了其他同事,百思不得其解。最终提单向总部研发老师求助,发现问题的所在。
mqConfigFiles.config没有直接配置在prop下,中间加了mqConfigFiles.properties。遂按照老师指点修改配置,重启服务,果然可以正常识别。
测试环境顺利后向生产环境部署。部署后测试发下多张单据并发时依然出现了冲突的情况,插件并没有按顺序执行。又咨询了研发老师,找到原因,测试环境非容器部署在执行时肯定是顺序执行,但生产环境容器部署mservice有多个负载,导致了并行。解决方案是在xml增加sequential="true"参数来顺序执行。
总结:
1、在mc中配置mqConfigFiles.config的时候一定要直接放在prop下。
2、如果需要一条条顺序执行,则在配置文件queue中增加 sequential="true" 参数。
推荐阅读