Soul源码分析--soul-admin数据同步(1)

Soul源码分析--soul-admin数据同步之websocket、http


之前写过一篇 Soul源码分析–soul-admin源码分析 里面介绍了数据同步的方式和数据同步的种类,现在来深入分析一下各种数据同步的原理,包括 websocket、http、zookeeper、nacos 数据同步。这里我们先可以参考 官网的文档,大概看一下原理,然后根据代码来分析。
这一篇只会分析 websocket、http,下篇会分析 zookeeper、nacos,点这里查看 下一篇

webosocket 数据同步

  1. 启动 soul-admin 项目时,会根据数据源加载相应的数据,这里用 mysql 数据源为例,启动会执行 init 包下面的 LocalDataSourceLoader 类的方法,判断 bean 是否是数据源且初始化设置是否为 true,然后会执行相应初始化数据的方法,控制台会打印相应执行的 sql 文件名称(这里要注意的是,每次都会去执行初始化,所以如果用在生产上的话,应该把 initEnable 这个属性在第一次执行完之后,设置成 false)。
    private void execute(final Connection conn) throws Exception {
        ScriptRunner runner = new ScriptRunner(conn);
        runner.setLogWriter(null);
        Resources.setCharset(StandardCharsets.UTF_8);
        Reader read = Resources.getResourceAsReader(dataBaseProperties.getInitScript());
        log.info("execute soul schema sql: {}", dataBaseProperties.getInitScript());
        runner.runScript(read);
        runner.closeConnection();
        conn.close();
    }

在这里插入图片描述

  1. 如果在网关后台选择器配置中配置了一个没启动服务的地址,点保存后,后台会去执行检查,如果没找到相应的服务,这个配置则不生效。
    在这里插入图片描述
    点保存后,控制台打出来的日志,可以看出来,检查地址失败了(不知道什么原因,日志这里打了断点没能进去调度)。
    在这里插入图片描述
    再去看看页面刚刚加的配置,也被清空了。
    在这里插入图片描述
    如果配置的地址不对,后台会有线程去检查这个地址,如果地址不对,再刷新一遍数据,这也是为什么 Soul-WebSocketClient 里面的这段代码会执行两次
    private void handleResult(final String result) {
        WebsocketData websocketData = GsonUtils.getInstance().fromJson(result, WebsocketData.class);
        ConfigGroupEnum groupEnum = ConfigGroupEnum.acquireByName(websocketData.getGroupType());
        String eventType = websocketData.getEventType();
        String json = GsonUtils.getInstance().toJson(websocketData.getData());
        websocketDataHandler.executor(groupEnum, json, eventType);
    }
  1. 注意:如果只用 websocket 或者 http 同步数据,在 bootstrap 项目里面需要把下面这个 maven 依赖给注释掉
    在这里插入图片描述
    因为这里面会疯狂的连接 zookeeper ,为了测试方便,先把这个注释掉
    在这里插入图片描述

Http 数据同步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值