该昵称无法识别

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

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

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

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

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101191920135.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ==,size_16,color_FFFFFF,t_70#pic_center)

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

    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101191930363.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ==,size_16,color_FFFFFF,t_70#pic_center)

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

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101191952815.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ,size_16,color_FFFFFF,t_70#pic_center)![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101191952876.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ,size_16,color_FFFFFF,t_70#pic_center)

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

    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192003865.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ==,size_16,color_FFFFFF,t_70#pic_center)

  2. 查看 serviceInfo 来源

    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192020768.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ==,size_16,color_FFFFFF,t_70#pic_center)
    在这里插入图片描述

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

    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192113287.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ==,size_16,color_FFFFFF,t_70#pic_center)

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

    ![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192121111.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ==,size_16,color_FFFFFF,t_70#pic_center)

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

![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192139720.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ,size_16,color_FFFFFF,t_70#pic_center)在这里插入图片描述![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192139833.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ,size_16,color_FFFFFF,t_70#pic_center)
![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192139870.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ,size_16,color_FFFFFF,t_70#pic_center)![在这里插入图片描述]( https://img-blog.csdnimg.cn/20201101192139896.png?x-oss-process=image/watermark ,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NKRzc1Mzk1MQ,size_16,color_FFFFFF,t_70#pic_center)

  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/

posted on 2020-11-01 19:27  Java全栈路线  阅读(2648)  评论(0)    收藏  举报