EAS 工作流缓存不一致问题
写在前面,可更新下面补丁解决问题:
861版本:PT172285
850版本:PT173361
820版本:PT173183
如果综合考虑对打补丁有疑问,可以从最下面的附件中下载私包。
最近工作流又出现了在各实例之间缓存不能同步的问题,表现为流程变量丢失;任务,节点,流程状态在各实例之间状态不一致等。
刚好主干可以重现问题,跟踪了下发现了问题原因,原因和集成云在EAS端的代码有关系分析过程见链接:https://fantasy-dinner-f11.notion.site/fabe8eaf785a4fa187207bd97a48a13e
针对现场问题,如何验证?
1,去查询分析器执行如下 服务器端脚本,这个脚本是去获取缓存同步服务的 同步命令:
var c = java.lang.Class.forName("com.kingdee.cbos.process.vm.utils.group.MessageServer"); var field = c.getDeclaredField("services"); field.setAccessible(true); field.get(c).toString()
2,查看返回结果,返回结果会有2种情况
第一种,同步命令中包含【工作流的缓存同步命令】,没有问题:
工作流的缓存同步命令: CACHE_EXPIRE=com.kingdee.cbos.process.vm.utils.cache.MCastListener$CacheExpireSvc CACHE_CLEAR=com.kingdee.cbos.process.vm.utils.cache.MCastListener$CacheClearSvc
如下两种形式:
----
第二种,同步命令中 不包含【工作流的缓存同步命令】,有问题
3,处理方式,打工作流私包做兼容即可,私包见附件(编译版本jdk1.6)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
补充:如果【工作流的缓存同步命令】没问题!!!,见下面的操作
我们关注到在代码,程序都没有问题的情况下,工作流的缓存在多实例之前仍然不同步,经过对几个问题客户的研究之后,我们发现是操作系统(linux)对缓存内部组播(udp)端口的限制,可在linux 命令行执行如下操作解决为题(下面的命令是让操作系统防火墙放开对该端口的限制,注意该端口属于操作系统内部的通信机制,放开没有其他的访问风险):
#1,操作系统防火墙增加允许udp 38928端口访问: sudo iptables -A INPUT -p udp -m udp --dport 38928 -j ACCEPT sudo iptables -A OUTPUT -p udp -m udp --dport 38928 -j ACCEPT #2,保存配置 sudo firewall-cmd --runtime-to-permanent 或者 sudo service iptables save
补充:
EAS 工作流缓存不一致问题
本文2024-09-16 22:10:07发表“eas cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-eas-46367.html