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报错位置。

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

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

 此处发现,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

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

 此处为想nacos请求注册在nacos的所有service,获取所有service的信息。如何到这一步的可以查看源码,一步步得到。同时,seata-client也有启动一个定时线程,定时更新注册在nacos中的service。在HostReactor中。

 综上所述,如果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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值