有幸参加 soul 网关社区的【发电机计划】,进行为期四周的源码深度学习。
接下来的四周将在这里记录学习的脚印。
一、目标
1.搭建网关环境(github 一键三连 star,watch,fork)
2.编译代码,运行 soul-admin、soul-bootstrap
3.记录心得,写博客分享。
二、内容
启动前准备
将 fork 的 soul 项目 clone 到本地
git clone git@github.com:stephenshen1993/soul.git
使用 Maven 编译 root 项目
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
运行soul-admin
从命名上看,soul-admin 应该是 soul 的管控台,先尝试启动项目。
尝试直接运行 SoulAdminBootstrap 启动 soul-admin,控制台报错如下:
在错误堆栈的末尾,看到如下信息:
nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
初步怀疑是数据库连接问题,打开application.yml验证猜想
果然需要连接数据库服务,同时注意到名为h2的profiles被注释未生效,应该是配合application-h2.yml接入内存数据库。
application-h2.yml内容:
soul:
database:
dialect: h2
init_script: "META-INF/schema.h2.sql"
spring:
datasource:
url: jdbc:h2:mem:~/soul;DB_CLOSE_DELAY=-1
username: sa
password: sa
driver-class-name: org.h2.Driver
故此处我选择启用profiles注释,使用application-h2.yml配置的h2数据库。
(也可以直接启动本地数据库服务接入)
再次启动soul-admin,项目启动成功。
访问 http://localhost:9095,默认账号/密码:admin/123456
运行soul-bootstrap
从命名上看,soul-bootstrap应该是soul的入口,后续debug应该是从这里开始,尝试启动项目。
顺利启动
同时注意到soul-admin有打印更多信息
可以看到,soul-admin在感知到soul-bootstrap启动后,才开始初始化数据库表及相关可执行服务。
直到此时,soul-admin的重定向服务、插件服务等才真正拉起来,以及初始化dispatcherServlet。
那么,soul-admin是如何感知到的呢?从soul-bootstrap的配置文件中发现了一点端倪
字面上理解,soul-bootstrap是在启动时与soul-admin通过websocket建立同步通道,具体同步机制后面需要跟踪。
三、总结
- soul-admin是带状态管控端,应该是通过数据库记录某些状态及元数据信息。
采用懒加载模式,同步通道建立后,才初始化数据库表单和管控台mvc服务。 - soul-bootstrap应该是soul启动入口,启动时通过websocket与soul-admin建立同步通道,同步机制尚待跟踪。
同时注意到配置文件中有健康检查相关配置,使用场景也需跟踪。