背景seata 1.4.2 ;nacos 2.0.3,公司要求nacos不能使用弱密码(必须包含特殊字符)。
在nacos 网页修改密码后(带@符号),修改SpringCloud应用配置中的密码可以正常启动,
但修改seata中nacos密码(${SEATA_HOME}/conf/registry.conf配置文件中nacos的password)启动seata报错。
registry.conf配置:
报错信息:
问题原因:
seata 注册到nacos使用的是RestTemplate,会将密码中的特殊字符进行转义,导致密码验证不通过。
查询seata官网确认是1.4.2的bug,高版本已经修复。如果想继续使用seata 1.4.2 需要更新nacos-client。
解决方案:
方案1:从官方下载1.4.2源代码:seata: Seata 是一款开源的分布式事务解决方案,提供高性能和简单易用的分布式事务服务 - Gitee.com
修改nacos-client的版本为1.4.2
按照官网推荐的方式,重启生成seata-server-1.4.2
1. 删除 distribution 模块的bin、conf和lib目录。
2. ./mvnw clean install -DskipTests=true(Mac,Linux) 或 mvnw.cmd clean install -DskipTests=true(Win) -P release-seata。
3. 在 distribution 模块的 target 目录下解压相应的压缩包即可。
4. seata-1.5之后(最新develop分支)的打包命令:mvn -Prelease-seata -Dmaven.test.skip=true clean install -U。
重新部署seata,请注意,原先部署的seata可能修改过一些配置文件,需要在新的seata同步修改
方案2:不部署新编译的seata-server,只替换seata lib下的依赖包。
为了确认替换jar是否影响其他地方,在IDEA修改nacos-client的版本,编译打包后,对比lib下的依赖包。
对比nacos-client 1.3.3和1.4.2的区别,除了nacos-client三个包外,两个包都是common-io和common-lang,应该没影响。
替换服务器上的这三个包:nacos-client-1.4.2.jar、nacos-common-1.4.2.jar、nacos-api-1.4.2.jar
并重启seata,注册到nacos成功。