序
最近参加了一个阅读源码的活动,要求就是在接下来的 4 周时间里学习 SOUL 网关开源项目的源码,并且用文字记录下自己的收获。
今天是第一天。
尽管之前就已经 fork 了源码,但是一直没怎么去看过,希望这次的活动能让自己有所收获。
目标:
- 搭建网关环境
- 编译代码,运行 soul-admin soul-bootstrap
- 记录心得
同步上游仓库
当我打开尘封已久的 SOUL 项目时,发现之前 fork 的项目没有同步最新的提交,那么首要的问题就是同步最新的代码了。
粗暴的解决方式就是删掉 fork 的项目,然后重新 fork 一次,虽然能解决问题,但是不太合理。
比较合适的方式是借助 git 命令去添加上游仓库,然后拉取变动,之后合并再推送到自己 fork 的仓库。
// 添加上游仓库 upstream 表示别名
git add remote upstream https://github.com/dromara/soul.git
// 拉取上游仓库的变动
git fetch upstream
// 合并
// 这里用 rebase 或者 merge 都行,upstream 就是上面定义的别名,master 就是主分支名
// 如果本地没有变动,是可以不用合并的,直接推送
git rebase upstream/master
git merge upstream/master
// 推送到远程仓库
git push origin master
soul-admin 模块
soul-admin 是 SOUL 项目的 Web 管理模块,提供了网关的插件配置、网关路由配置、数据的存储和更新。也就是说,可以通过该模块去自由的配置各个 api 的转发,以及插件类型。
由于涉及到数据的存储,所以需要配置数据库,默认的是 MySQL 数据库,同时也支持基于内存的 H2 数据库。
启动项目时会先去初始化表结构,用来存储整个 SOUL 项目需要持久化的数据。
soul-bootsrap 模块
这个模块是 SOUL 的网关启动模块,启动该项目会加载一系列的插件,以及 netty 服务。
所有 api 经过 SOUL 网关代理之后都可以通过该模块暴露的服务去访问原来提供的服务。
这个模块引入的依赖比较多,暂时可以不用去管它,只需要知道一点——网关代理之后的服务全部都在这里就行了。
有了管理系统,有了网关系统,剩下的就是 api 服务了,拿最常用的 HTTP 服务举例,soul-examples-http 模块。
soul-examples-http 模块
这个模块是 HTTP 的使用案例模块,一旦启动就会自动把暴露出来的接口注册到 SOUL 网关上,通过上面启动的 soul-admin 就可以看到暴露出来的接口,同时可以通过上面提到的 soul-bootsrap 模块去使用 soul-examples-http 暴露的服务。
比如 soul-examples-http 默认提供的 http://localhost:8188/order/findById?id=1 接口可以使用 http://localhost:9195/http/order/findById?id=1 接口来代替。
总结
看到了这里,是不是觉得很神奇?
为什么仅仅启动一个 HTTP 服务就可以在 soul-admin 面板里看到暴露的服务?
为什么同时还可以通过另外一个服务访问得到相同的结果?
这三者有什么样的联系?
我们下期再见。