欢迎使用普元产品知识库,本知识库包含普元应用开发平台EOSPlatform,流程平台BPS,企业服务总线ESB,微服务平台Microservice,运维管理平台Devops,数据集成平台DI
欢迎使用普元文档库
EOS Platform 7.5 集群,开启多租户,每个租户配置独立的数据源,当前租户ten下,启动B流程定义的实例,出现异常:未找到已发布流程定义:A
A流程定义模板并不是ten下的,而且租户ten1下的
定位到A租户启动流程时报错:未找到已发布的流程定义 的原因是A、B租户对应的数据源存在同样的流程定义ID,流程定义不同。
集群环境,启动流程时会优先加载缓存中数据。
如,此时需要启动A租户下的流程定义,由于A、B租户流程定义ID相同,流程定义不同,所以启动时可能报错:未找到已发布的流程定义。
进一步分析表数据,看到A、B租户下冲突的流程定义ID,
A下的流程定义ID是多租户表WFMULTITENANCY创建之前生成的,
B下的流程定义ID是多租户表WFMULTITENANCY创建之后生成的。
追溯到环境做过升级,从BPS6.7单租户升级到EOS7.5多租户,仅在相关表中添加了TenantID字段,没有考虑到主键冲突导致。
不同租户下出现processDefID相同的原因:系统是由低版本升级上来的,升级时在表里添加了租户信息,没有考虑到流程定义相同的问题;
解决办法:
1)应急方案:update现在出现问题的流程定义表,流程定义ID必须唯一,排查流程定义表、流程实例表,修改可能会重复的ID值;
2)长远方案: 找到老系统流程定义表、流程实例表主键最大值,比如为10000, 修改现在使用的数据源里EOS_UNIQUE_TABLE中对应的CODE值为10001,重启server, 那么重新生成的主键会从10001开始,不会和历史数据重复。
3)重写主键生成器实现,生成定长主键,如:123XXXXXXXXX001,定长主键由15位数字组成,前三位为租户ID,后三位为流程定义ID/流程实例ID(后三位递增)。