今天开始进行为期一个月的 Soul 源码学习,简单来说,Soul 是基于 WebFlux 实现的响应式的 API 网关,具有异步、高性能、跨语言等特点,Soul网关官网介绍。
由于我一直写的是单体应用,还没有用过网关,因此先去查了网关到底是什么。看到芋道源码的一篇文章,讲解的比较详细,文章地址。看完后,我才对网关有点了解,网关主要用在微服务架构,是一切流量的入口,针对用户的请求进行转发。我们可以在网关做很多事情,比如限流,熔断,监控,也因此对网关的性能,稳定性要求很高。
准备工作
soul fork 到自己的 Github,clone 到本地,在本地创建一个新分支用来学习。
mvn 编译命令
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
运行
首先启动本地 mysql 服务,运行 soul-admin
目录下的 SoulAdminBootstrap
,它会自动帮我们创建数据库及对应的表,启动完成,访问 http://localhost:9095/ ,即可进入网关的后台管理系统,用户名:admin,密码:123456。在这个管理系统,可以动态配置插件的选择器和规则。
启动 soul-bootstrap
目录下的 SoulBootstrapApplication
,这里是网关的主要入口,但是看了下代码很少,这么少的代码是怎么实现请求转发的呢,后续我们慢慢研究。默认端口是 9195,我们访问所有服务,都是通过这个端口。
今天只是简单的编译下代码,运行下两个主要的模块。
希望在这段时间的学习中,我可以克服对阅读源码的恐惧,弄清楚网关底层的逻辑,认真研究下 soul 网关引用的第三方技术,学习 soul 代码里设计模式的应用以及优秀的编码习惯。