EAS 工作流缓存不一致问题

栏目:eas cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

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


UP00062254.rar


补充:

工作流引擎缓存淘汰机制bug:com.kingdee.cbos.process.vm.utils.cache.LocalCache 的put方法淘汰应该淘汰队列首位节点,如果对应环境代码跟如下一致那么也可以通过该帖的补丁或私包进行处理。

image.webp

EAS 工作流缓存不一致问题

写在前面,可更新下面补丁解决问题:861版本:PT172285850版本:PT173361820版本:PT173183如果综合考虑对打补丁有疑问,可以从最下面的附...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息