这个错误是注册之前获取seata服务失败。
当客户端配置了seata相关的配置时,会去注册seata-server服务。在注册之前,会去获取可以的seata-service。如果获取不到,客户端就会报错“no available service 'null' found, please make sure registry config correct”。
如果感兴趣,可以去跟踪一下源码:
第一步:找到报错的代码位置
第二步:去查看可以服务列表方法
第三步:找到lookup,找到其实现类。 我这边注册中心是nacos
重点看getServiceGroup方法!!
如果获取到了,但未匹配到,就要关注第二个方框内容。
点击getConfig方法,一直找,知道找到getLastConfig
从这里看,突然发现:从命名空间“0cee9ba2-2515-481b-af80-254a9f42ea2c”找分组为“SEATA_GROUP”的dataI的是“service.vgroupMapping.lq-seller-group”的服务。
去查看nacos配置:
发现没有service.vgroupMapping.lq-seller-group的配置。
问题找到了。新增分组为SEATA_GROUP的service.vgroupMapping.lq-seller-group配置。
加完之后:
问题解决!
小插曲:
我之前知道要配service.vgroupMapping.lq-seller-group,但是我配置的位置是:
按照我们之前分析来看,很明显了,命名空间不对。
那么客户端的服务,怎么知道要找什么命名空间的什么分组的什么dataid呢?
打开客户端服务的配置文件,查看配置:
可以发现,我的客户端配置的是另一个空间的配置。这个时候,我们既可以改这个命名空间也可以在另一个命名空间重新新增一个service.vgroupMapping.lq-seller-group。
同理:
如果是配置的问题导致注册失败,也可以通过这个思路去查找。