问题的出现
seata:
registry: # TC服务注册中心的配置,微服务根据这些信息去注册中心获取tc服务地址
# 参考tc服务自己的registry.conf中的配置
type: nacos
nacos: # tc
server-addr: ip:8848
namespace: ""
group: DEFAULT_GROUP
application: seata-tc-server # tc服务在nacos中的服务名称
username: nacos
password: nacos
tx-service-group: seata-demo # 事务组,根据这个获取tc服务的cluster名称
service:
vgroup-mapping: # 事务组与TC服务cluster的映射关系
seata-demo: SH
给服务整合到Seata的TC服务时,配置集群这里出现了找不到集群的问题,报错如下
ERROR 17016 --- [eoutChecker_1_1] i.s.c.r.netty.NettyClientChannelManager : can not get cluster name in registry config 'service.vgroupMapping.storage-service-fescar-service-group', please make sure registry config correct
但我们明明配置了tx-service-group
可以找到这行报错来自NettyClientChannelManager
,于是我顺腾摸瓜找到报错的地方向上DEBUG
可以看到日志来自这个reconnect(String group)
方法,这个方法就是将配置的tx-service-group
传入并找到对应的集群名称,于是我就开始向上一路摸索
发现这个组名称是通过GlobalTransactionScanner
这个类进行构造的,于是我就找到这个类的自动装配配置类
在这里找到了问题的根源,也就是报错日志中的xxxxx-service-fescar-service-group
到底是从何而来,这里会首先对txServiceGroup
进行判断,如果为空,那么就将txServiceGroup
设为当前服务的名称 + -fescar-service-group
,而之所以这个txServiceGroup
值为空是因为,这个自动配置类扫描的前缀是spring.cloud.alibaba.seata
!!!!!这里有一个单独的为txServiceGroup
注入的属性配置类
而我们在配置文件中配置的注入的tx-service-group
是 seata
前缀的,所以才会找不到tx-service-group
解决方法
修改配置文件中的tx-service-group
的位置为
spring:
cloud:
alibaba:
seata:
tx-service-group: