soul源码阅读(七)Spring Cloud应用示例运行续2
好咧,咱们继续上篇文章运行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相关推荐
- Soul 网关源码阅读(二)代码初步运行
Soul 源码阅读(二)代码初步运行 简介 基于上篇:Soul 源码阅读(一) 概览,这部分跑一下Soul网关的示例 过程记录 现在我们可以根据地图,稍微探索一下周边,摸一摸 ...
- mybatis源码阅读(七) ---ResultSetHandler了解一下
转载自 mybatis源码阅读(七) ---ResultSetHandler了解一下 1.MetaObject MetaObject用于反射创建对象.反射从对象中获取属性值.反射给对象设置属性值,参 ...
- 【Spring 源码阅读】Spring IoC、AOP 原理小总结
Spring IoC.AOP 原理小总结 前言 版本约定 正文 Spring BeanFactory 容器初始化过程 IoC 的过程 bean 完整的创建流程如下 AOP 的过程 Annotation ...
- 【Soul源码阅读系列(一)】Soul网关初探
本篇文章主要内容如下: Soul是什么 如何在本地运行Soul 对Soul进行压测 Soul 是什么 Soul是什么?它可不是灵魂交友软件! 引用Soul的官网,它是这样描述Soul的: 这是一个异步 ...
- 【Soul源码阅读】2.单机部署 Soul
上一篇中,我们对 Soul 有了一个简单的认识. 在学习一项新技术时,我们先按照官网上的 Demo 把环境搭建起来.今天先搭建一个单机版测试环境. 1.下载源码 soul 的 github 地址: h ...
- Spring 源码阅读 之 Spring框架加载
说起第一次阅读Spring Framework源码,大概还是2010年吧,那个时候还不懂技巧和方法,一头扎在代码的汪洋大海里,出不来了.后面几年偶尔断断续续的也看过几次,都是不得要领,最后都是无疾而终 ...
- spring依赖注入_Spring源码阅读:Spring依赖注入容器
依赖注入 依赖注入是Spring框架最核心的能力,Spring框架提供的AOP,WebMVC等其它功能都是以依赖注入容器作为基础构建的,Spring依赖注入容器类似于一个用于组装对象的框架内核,任何应 ...
- 从源码底层聊聊Spring Cloud是如何一统服务注册、发现编程模型
文章目录 背景 源码版本 核心抽象接口 DiscoveryClient EnableDiscoveryClient ReactiveDiscoveryClient ServiceInstance Re ...
- 文件管理系统源码_基于Spring Cloud微服务构建多平台功能完善小说弹幕网站源码分享...
致力于打造一个完整的可商用.可学习的小说门户平台,重新进行了数据库设计.代码重构和功能增强,提升了程序整体的可读性和性能,增加了很多商用特性. 是一个多平台(web.安卓app.微信小程序).功能完善 ...
- soul源码阅读 启动soul应用
soul的官方文档地址:https://dromara.org/zh-cn/docs/soul/soul.html 素质三连,watch,start,fork之后cl ...
最新文章
- shiro配置参考(一)
- ACL 2018 收录论文 | 如何高效提炼有效信息?
- 130塔式服务器系统,PowerEdge T130塔式服务器怎么样
- syslog 向内存中缓存_动画:深入浅出从根上理解 HTTP 缓存机制及原理!
- Adobe Indesign怎么让图片衬于文字下方?
- PlistEdit Pro for Mac(Plist编辑器)
- 关于清理系统垃圾的bat
- 微信支付 签名 java_Java后台微信支付签名算法(MD5)
- Git - IDEA中分支右侧上下箭头的含义
- Python给照片换底色(蓝底换红底)
- 从零搭建飞冰微前端项目《第三篇:搭建微应用》❤️
- IC、FPGA验证学习
- Android里的相对坐标
- Cyberpunk!特斯拉发布皮卡,造型雷翻众人
- QGraphicItem实现中心旋转
- 【ECCV 2020】UDA with Noise Resistible Mutual-Training for Person Re-identification (NRMT)
- Open edX数据结构Mysql edxapp
- 国家卫健委5G+医疗健康应用试点项目建议方向全文
- React Native TEXT 组件文字显示不全 异常解决(小米文字显示不全:小米10 ,Redmi k30出现)
- 阿里内部最新 Java 面试解析(全彩版)开源!(分布式 / 中间件 / 高并发 / 设计模式全都有)