搭建网关环境
首先从fork soul的仓库,并git clone 到本地进行调试
git clone https://github.com/dromara/soul.git
参考Soul极简入门
步骤及在调试过程中遇到的error:
mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true
合理使用一些参数来例如skipTest避免编译阶段不必要的时间
可能编译阶段会遇到 package javafx.util does not exist issue, 可以参考javafx-maven-docs 来安装相关的依赖项- 安装并运行soul-admin, 直接在org.dromara.soul.admin.SoulAdminBootstrap启动springboot application.
Note: soul-admin依赖mysql database, 所以在启动之前在
application.yml
里添加新的datasource以及相关配置并create schema soul;
- 启动之后访问 http://127.0.0.1:9095/, 输入账号密码,进入首页。点开插件管理,会发现:
默认divide插件开启 - 安装并运行soul-bootstrap,直接在
org.dromara.soul.bootstrap.SoulBootstrapApplication
下启动,我们可以在application-local.yml
找到默认的数据sync方式为websocket, 若在此时在soul-admin下看到输出以下日志,及说明连接成功。
2020-05-22 20:32:48.005 INFO 48891 --- [0.0-9095-exec-1] o.d.s.a.l.websocket.WebsocketCollector : websocket on open successful...
- 如果直接访问 http://127.0.0.1:9195/, 会返回以下JSON format
{
"code": -107,
"message": "Can not find selector, please check your configuration!",
"data": null
}
通过打断点会发现在CheckUtils class中有checkSelector方法会检查当前的pluginName, 由于Soul-admin默认开启divide plugin,所以会在日志打印出error, 并返回-107
public static Mono<Void> checkSelector(final String pluginName, final ServerWebExchange exchange, final SoulPluginChain chain) {
if (PluginEnum.DIVIDE.getName().equals(pluginName)
|| PluginEnum.DUBBO.getName().equals(pluginName)
|| PluginEnum.SPRING_CLOUD.getName().equals(pluginName)) {
log.error("can not match selector data: {}", pluginName);
Object error = SoulResultWrap.error(SoulResultEnum.CANNOT_FIND_SELECTOR.getCode(), SoulResultEnum.CANNOT_FIND_SELECTOR.getMsg(), null);
return WebFluxResultUtils.result(exchange, error);
}
return chain.execute(exchange);
}
- 使用superbenchmarker进行压测
- 启动soul-examples-http,在本地端口8188
sb -u http://127.0.0.1:8188/test/findByUserId?userId=123123 -c 30 -N 30
, 得到以下结果:
此时在soul-admin divide plugin中设置相关路由规则,通过soul 网关进行压测:sb -u http://127.0.0.1:9195/http/test/findByUserId?userId=123123 -c 30 -N 30
感悟及总结
这是我第一次参加源码训练营,作为一名在读学生,深深感觉到自己在技术经验上的不足和自身技能的匮乏,希望能通过28天的训练能够和各位前辈大佬取取经,明确自身的技术发展方向,提升自己读源码,理解源码的技能。今天的简单调试只是一个开始,希望今后能够坚持下来,并有所感悟。
明天会结合divide插件,发起http请求 soul 网关,体验http代理。