springcloud通过nacos整合seata遇到的问题

1、配置完成后,启动seata-server服务器,注册到nacos,启动client后访问接口,报错如下:

io.seata.common.exception.FrameworkException: No available service
    at io.seata.core.rpc.netty.AbstractNettyRemotingClient.loadBalance(AbstractNettyRemotingClient.java:257)
    at io.seata.core.rpc.netty.AbstractNettyRemotingClient.sendSyncRequest(AbstractNettyRemotingClient.java:133)
    at io.seata.rm.AbstractResourceManager.branchRegister(AbstractResourceManager.java:67)
    at io.seata.rm.DefaultResourceManager.branchRegister(DefaultResourceManager.java:96)
    at io.seata.rm.datasource.ConnectionProxy.register(ConnectionProxy.java:238)
信息显示,seata没有可用的服务,此时一般为seata服务器中register的配置与client项目中register配置不一致导致。查看源码。

进入AbstractNettyRemotingClient报错位置。springcloud通过nacos整合seata遇到的问题_第1张图片

 发现address为null导致。打断点,发现inetSocketAddressList的size为空,所以进入lookup方法中。

springcloud通过nacos整合seata遇到的问题_第2张图片

 我是用的是nacos,所以进入的NacosRegistryServiceImpl的lookup方法。

springcloud通过nacos整合seata遇到的问题_第3张图片

 此处发现,service的获取与4个参数相关,对应配置为 

#seata-server的应用名称
seata.registry.nacos.application=flyc-seata-server
#seata-server的组名
seata.registry.nacos.group=myseatagroup
#事务分组名称
seata.tx-service-group=service-order-group
#nacos中的配置
service.vgroupMapping.service-order-group default

分别对应seata-server中的配置register.conf

springcloud通过nacos整合seata遇到的问题_第4张图片

 除此之外,还有一个参数,namespace,此处源码没有体现,但是在请求nacos获取seata的service列表中有体现。如下图,在NamingProxy中的请求中。

springcloud通过nacos整合seata遇到的问题_第5张图片

 此处为想nacos请求注册在nacos的所有service,获取所有service的信息。如何到这一步的可以查看源码,一步步得到。同时,seata-client也有启动一个定时线程,定时更新注册在nacos中的service。在HostReactor中。springcloud通过nacos整合seata遇到的问题_第6张图片

 综上所述,如果seata报错,io.seata.common.exception.FrameworkException: No available service,需要检查client和sever的参数匹配情况,共有四个参数。

 application = "flyc-seata-server"
 group = "myseatagroup"
 namespace = "1"
 cluster = "default"

在使用nacos的情况下,client的配置是

#seata-server的应用名称

seata.registry.nacos.application=flyc-seata-server

#seata-server的组名

seata.registry.nacos.group=myseatagroup

#事务分组名称

seata.tx-service-group=service-order-group

#nacos中的配置

service.vgroupMapping.service-order-group=default

seata.registry.nacos.namespace=1

你可能感兴趣的:(springcloud,spring,cloud,java,服务器)