SpringCloud整合Seata报错no available server to connect. 源码跟踪

SpringCloud整合Seata报错no available server to connect. 源码跟踪

  1. 通过控制台提示来到 NettyClientChannelManager 类中, 全局搜索 no available server to connect. 找到方法入口

在这里插入图片描述

  1. 进入 getAvailServerList() 找到 availList 来源

    在这里插入图片描述

  2. 通过lookup()跳转到对应配置实现类

在这里插入图片描述在这里插入图片描述

  1. 通过 getAllInstances() 入口拿到所有实例

    在这里插入图片描述

  2. 查看 serviceInfo 来源

    在这里插入图片描述
    在这里插入图片描述

  3. 这里面是在 serviceInfoMap 获取的, 全局搜索下 serviceInfoMap.put() 看看在哪添加的

    在这里插入图片描述

  4. 这里是通过第一行的 JSON.parseObject() 方法来获取 serviceInfo 对象的, 通过IDEA的栈帧可以跳转到该方法的前一个方法中进行查看

    在这里插入图片描述

  5. 这里可以看到他是通过调用远程API的方法来实现的, 一路向下找过去看看最终方法

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  1. 到这里就可以看到我们实际发出的url了, 通过浏览器直接访问, 查看该url是否有效, 再调整对应参数即可

附带上本人另一篇博客 Nacos1.3.2 + Seata1.3.0 + MySQL8 + SpringCloud 排坑笔记, 希望能给遇到问题的小伙伴提供一点帮助

https://blog.csdn.net/CJG753951/article/details/109233010

一开始找了很多博客一直没能解决整合的问题, 后面看了大佬的源码分析, 自己一步步DEBUG, 看自己的配置信息具体是在哪个步骤出了问题, 才发现了问题所在. 感谢大佬提供的解决问题的思路

https://www.freesion.com/article/7552502508/

Spring CloudSeata都是分布式系统开发中常用的框架,它们可以一起使用来实现分布式事务管理。下面是Spring Cloud整合Seata的步骤: 1. 引入Seata的依赖 在Spring Boot项目的pom.xml文件中,添加Seata的依赖: ```xml <dependency> <groupId>io.seata</groupId> <artifactId>seata-all</artifactId> <version>${seata.version}</version> </dependency> ``` 其中${seata.version}需要根据实际情况进行替换。 2. 配置Seata的配置文件 在Spring Boot项目的resources目录下,创建一个名为file.conf的文件,并配置Seata的全局配置信息。示例如下: ```ini transport.type=TCP transport.server=NIO transport.heartbeat=true transport.enableClientBatchSendRequest=false transport.threadFactory.bossThreadPrefix=NettyBoss transport.threadFactory.workerThreadPrefix=NettyServerNIOWorker transport.threadFactory.serverExecutorThreadPrefix=NettyServerBizHandler transport.threadFactory.shareBossWorker=false transport.threadFactory.clientSelectorThreadPrefix=NettyClientSelector transport.threadFactory.clientSelectorThreadSize=1 transport.threadFactory.clientWorkerThreadPrefix=NettyClientWorkerThread transport.threadFactory.bossThreadSize=1 transport.threadFactory.workerThreadSize=default transport.shutdown.wait=3 service.vgroupMapping.my_test_tx_group=default service.seata.grouplist[default]=localhost:8091 client.rm.async.commit.buffer.limit=10000 client.rm.lock.retryInterval=10 client.rm.lock.retryTimes=30 client.rm.report.retryCount=5 client.rm.report.success.enable=false client.rm.table.meta.check.enable=false client.rm.table.undo.data.validation=false ``` 其中,service.vgroupMapping.my_test_tx_group是指将分布式事务组名为my_test_tx_group的应用程序映射到default分组,service.seata.grouplist[default]是指定Seata Server的地址和端口号。 3. 配置Spring Cloud的数据源 在Spring Boot项目中,需要将数据源配置为Seata的代理数据源。在application.properties或application.yml文件中,添加以下配置: ```yaml spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false spring.datasource.username=root spring.datasource.password=root # Seata DataSourceProxy spring.cloud.alibaba.seata.tx-service-group=my_test_tx_group spring.cloud.alibaba.seata.enable-auto-data-source-proxy=true ``` 其中,spring.datasource.*是指定应用程序使用的数据源,spring.cloud.alibaba.seata.*是指定使用Seata代理数据源。 4. 配置Spring Cloud的Feign客户端 如果应用程序中使用了Feign客户端,则需要配置Feign客户端的拦截器,以便在进行远程调用时启用Seata的分布式事务管理。在Spring Boot项目中,需要定义一个名为FeignConfiguration的类,并在其中添加以下配置: ```java @Configuration public class FeignConfiguration { @Bean public RequestInterceptor requestInterceptor() { return new SeataFeignClientInterceptor(); } } ``` 其中,Seata
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值