Soul源码总结-01-14

搭建网关环境

首先从fork soul的仓库,并git clone 到本地进行调试

git clone https://github.com/dromara/soul.git

参考Soul极简入门

步骤及在调试过程中遇到的error:

  1. 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 来安装相关的依赖项

  2. 安装并运行soul-admin, 直接在org.dromara.soul.admin.SoulAdminBootstrap启动springboot application.

    Note: soul-admin依赖mysql database, 所以在启动之前在application.yml里添加新的datasource以及相关配置并create schema soul;

  3. 启动之后访问 http://127.0.0.1:9095/, 输入账号密码,进入首页。点开插件管理,会发现:
    在这里插入图片描述
    默认divide插件开启
  4. 安装并运行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... 
  1. 如果直接访问 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);
    }
  1. 使用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代理。

猜你喜欢

转载自blog.csdn.net/qq_42965594/article/details/112623405