好咧,咱们继续上篇文章运行Spring Cloud应用示例出现的问题,{"code":-106,"message":"Can not find url, please check your configuration!","data":null}。

全文搜索关键字Can not find url, please check your configuration,凭已有的经验(啥经验?读一遍前两篇Spring Cloud的文章,并试着debug看看,就有这个经验了。)定位到org.dromara.soul.plugin.httpclient.WebClientPlugin#excute(),在该源码处打个debug断点验证下猜想。

debug进来了,且看soulContext的内容,看起来都是符合预期的,但是urlPath在exchange.getAttribute(Constants.HTTP_URL)的时候获取到的值为null,然后就抛出开头提到的那个异常了。

再来看下什么地方putAttribute(Constants.HTTP_URL)呢?因为咱们现在要运行着的是Spring Cloud插件,所以全文搜索下关键字Constants.HTTP_URL定位到org.dromara.soul.plugin.springcloud.SpringCloudPlugin#doExecute(),可看到在该处其实是做了exchange.getAttributes().put(Constants.HTTP_URL, realURL)的处理的,那么同样我们也debug观察看看,是怎么回事?

这回没达到预期了,debug断点没进来,不慌,咱们回到org.dromara.soul.web.handler.SoulWebHandler#execute()方法看下,只加载到16个插件,看起来并没有spring cloud插件,那么插件是怎么加载进来的呢?继续往前定位源码。

我们可以看到org.dromara.soul.web.handler.SoulWebHandler#SoulWebHandler()方法里做了插件的初始化,然后new SoulWebHandler(soulPlugins)的位置在org.dromara.soul.web.configuration#soulWebHandler()方法里去初始化注册bean的,只是final ObjectProvider<List<SoulPlugin>> plugins这个参数值时怎么拿到的呢?全文搜了下,没找到有这么一个集合初始化的位置。最终问过大佬们(一起学习源码的小伙伴),soul作者给我们答疑过这个问题,去翻了下,明白了,这个参数是已经被注册的spring bean,或者在注册这个bean之前会先去找到参数的bean然后注册,而同类型的bean注册完了后,spring会将它放到一个这样的list集合里。

类似截图中这样的两个初始化操作,被先被找到,且注册后放到SoulPlugin的集合中。那么我们继续找,为什么SpringCloudPlugin没被注册?是不是在网关启动的时候没有starter它?

果然找了下bootstrap的pox.xml,没有引入starter,打开注释,重启。

Spring Cloud插件加载进来了,请求的时候doExcute方法也被加载了,那么是不是都正常了呢?不巧的是,又报新错误了。

不慌,咱们浏览器直接请求下我们的示例服务进程

那就不是应用服务的锅了,还是bootStrap有点问题?

跟踪了下WebClientPlugin插件最终请求后端服务的时候,回去buildMediaType,其中拿到的Content-Type:"*/*",不太对。问了大佬后(同源码学习的小伙伴)

get请求的时候,要将request body的text去掉复选框,再请求就发现成功了,成功请求的截图如下:

至此,终于经过三天的debug调试,Spring Cloud示例运行起来了,当然这过程也让我们大致了解了一个请求到soul bootstrap后,插件的工作流程。下篇文章,不妨我们再把这个流程给梳理下。

soul源码阅读(七)Spring Cloud应用示例运行续2相关推荐

  1. Soul 网关源码阅读(二)代码初步运行

    Soul 源码阅读(二)代码初步运行 简介     基于上篇:Soul 源码阅读(一) 概览,这部分跑一下Soul网关的示例 过程记录     现在我们可以根据地图,稍微探索一下周边,摸一摸      ...

  2. mybatis源码阅读(七) ---ResultSetHandler了解一下

    转载自  mybatis源码阅读(七) ---ResultSetHandler了解一下 1.MetaObject MetaObject用于反射创建对象.反射从对象中获取属性值.反射给对象设置属性值,参 ...

  3. 【Spring 源码阅读】Spring IoC、AOP 原理小总结

    Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...

  4. 【Soul源码阅读系列(一)】Soul网关初探

    本篇文章主要内容如下: Soul是什么 如何在本地运行Soul 对Soul进行压测 Soul 是什么 Soul是什么?它可不是灵魂交友软件! 引用Soul的官网,它是这样描述Soul的: 这是一个异步 ...

  5. 【Soul源码阅读】2.单机部署 Soul

    上一篇中,我们对 Soul 有了一个简单的认识. 在学习一项新技术时,我们先按照官网上的 Demo 把环境搭建起来.今天先搭建一个单机版测试环境. 1.下载源码 soul 的 github 地址: h ...

  6. Spring 源码阅读 之 Spring框架加载

    说起第一次阅读Spring Framework源码,大概还是2010年吧,那个时候还不懂技巧和方法,一头扎在代码的汪洋大海里,出不来了.后面几年偶尔断断续续的也看过几次,都是不得要领,最后都是无疾而终 ...

  7. spring依赖注入_Spring源码阅读:Spring依赖注入容器

    依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...

  8. 从源码底层聊聊Spring Cloud是如何一统服务注册、发现编程模型

    文章目录 背景 源码版本 核心抽象接口 DiscoveryClient EnableDiscoveryClient ReactiveDiscoveryClient ServiceInstance Re ...

  9. 文件管理系统源码_基于Spring Cloud微服务构建多平台功能完善小说弹幕网站源码分享...

    致力于打造一个完整的可商用.可学习的小说门户平台,重新进行了数据库设计.代码重构和功能增强,提升了程序整体的可读性和性能,增加了很多商用特性. 是一个多平台(web.安卓app.微信小程序).功能完善 ...

  10. soul源码阅读 启动soul应用

             soul的官方文档地址:https://dromara.org/zh-cn/docs/soul/soul.html         素质三连,watch,start,fork之后cl ...

最新文章

  1. shiro配置参考(一)
  2. ACL 2018 收录论文 | 如何高效提炼有效信息?
  3. 130塔式服务器系统,PowerEdge T130塔式服务器怎么样
  4. syslog 向内存中缓存_动画:深入浅出从根上理解 HTTP 缓存机制及原理!
  5. Adobe Indesign怎么让图片衬于文字下方?
  6. PlistEdit Pro for Mac(Plist编辑器)
  7. 关于清理系统垃圾的bat
  8. 微信支付 签名 java_Java后台微信支付签名算法(MD5)
  9. Git - IDEA中分支右侧上下箭头的含义
  10. Python给照片换底色(蓝底换红底)
  11. 从零搭建飞冰微前端项目《第三篇:搭建微应用》❤️
  12. IC、FPGA验证学习
  13. Android里的相对坐标
  14. Cyberpunk!特斯拉发布皮卡,造型雷翻众人
  15. QGraphicItem实现中心旋转
  16. 【ECCV 2020】UDA with Noise Resistible Mutual-Training for Person Re-identification (NRMT)
  17. Open edX数据结构Mysql edxapp
  18. 国家卫健委5G+医疗健康应用试点项目建议方向全文
  19. React Native TEXT 组件文字显示不全 异常解决(小米文字显示不全:小米10 ,Redmi k30出现)
  20. 阿里内部最新 Java 面试解析(全彩版)开源!(分布式 / 中间件 / 高并发 / 设计模式全都有)

热门文章

  1. windows平台使用Docker搭建分布式hadoop集群
  2. 让 Alfred 支持拼音
  3. tomcat运行超时问题解决
  4. 微信小程序连接数据库
  5. 使用nodejs pkg创建exe文件后更改图标
  6. win10 登录显示0x800704cf错误代码
  7. c语言中各个符号的意义及作用是什么,C语言各类符号意义以及用法是什么?
  8. PROFINET GSDML文件关键字和博图硬件目录关系
  9. word的大纲视图用法你晓得了吗
  10. SSM+MySQL实现软件管理系统(含源码、MySQL、文档,包运行)