Seata的no available service ‘null‘ found, please make sure registry config correct解决

我们用的Seata版本是1.2 springcloud版本是springcloud hoxton.SR3

先记录下这个错的方法所在地,调用链是在Seata-all-1.2.0.jar

io.seata.core.rpc.netty.TmRpcClient.init()
->io.seata.core.rpc.netty.AbstractRpcRemotingClient.init()的reconnect(AbstractRpcRemotingClient.this.getTransactionServiceGroup())方法里

availList是从getAvailServerList方法获取,该方法调用链

io.seata.core.rpc.netty.NettyClientChannelManager.getAvailServerList.getAvailServerList

->RegistryFactory.getInstance().lookup()

->NacosRegistryServiceImpl.lookup() 因为我是使用Nacos做为注册中心所以这里调用的是NocosRegisterServiceImpl

->RegistryService.getServiceGroup 这里的参数Key就是tx-service-group的值 然后会拼成service.vgroupMapping.+key 就是完整的属性名 然后会根据完整属性名去获取值,再根据值去拿到对应的服务列表

根据这个调用链,会报这个错就是因为根据完整的属性名找不到对应的属性,所以更无法根据属性值去拿服务列表。

根据我打的断点,我发现在启动时

TmRpcClient.getInstance这个方法获取到的transactionServiceGroup还是我配置的那个,比如说my_test_tx_group

然后到了io.seata.core.rpc.netty.AbstractRpcRemotingClient.init()的reconnect(AbstractRpcRemotingClient.this.getTransactionServiceGroup()) 这一步时,

AbstractRpcRemotingClient.this.getTransactionServiceGroup()获取的值就已经变成服务名+“seata-service-group"  所以到这里,比如说服务名叫trade 完整的属性名就变成service.vgroupMapping.trade -seata-service-group

虽然nacos里seata的配置属性列表中也有service.vgroupMapping.trade -seata-service-group,这个属性也有值,但他还是会报这个错

上面transactionServiceGroup的变化在seata正常的服务里,是不会变的,只有在报这个错的服务里才有,所以我估计中间是有什么判断逻辑。

以上是发现到的现象。下面是解决方案,原先只是加了register,后面加了config就不会再报这个问题了

seata:
  enabled: true
  enable-auto-data-source-proxy: true
  registry:
    type: nacos
    nacos:
      server-addr: seata的服务器端口
      namespace: pre
#config就是新加的
  config:
    type: nacos
    nacos:
      server-addr: seata的服务器端口
      namespace: seata

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值