soul 网关入门篇(六):数据同步方式之 websocket

前言

上次说到,数据同步的大体流程是怎么样。那今天我们来从 websocket 的方式入手,看看他的实现如何。哪些精妙设计的方案,哪些在我们平常编码中能采用的呢?

多个 admin 服务

查看 WebsocketSyncDataService 的第一段代码
String[] urls = StringUtils.split(websocketConfig.getUrls(), ",");
进入 WebsocketConfig 时我们可以得知,我们可以配置多个 admin 的服务,并且他的配置方式为 127.0.0.1:8888,127.0.0.1:8889 ,配置为 soul-bootstrap 中的

soul :
    sync:
        websocket :
             urls: ws://localhost:9095/websocket,ws://localhost:9096/websocket

注意:这中间是没有空格的。
我们并不知道这样的配置是否正确,我们验证一下。配置好后重启 bootstrap, 发现

2021-01-20 23:54:19.387 ERROR 4530 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket url( ws://localhost:9096/websocket) is error

连接并不成功,这时我们得另外在起一个 admin,修改 soul-admin 的端口配置,


idea 配置9096端口

配置成功后启动应用,这个时候我们本地机子上有两个 admin 的进程。
由于之前启动的是 9095, 那现在我在 9096 上修改参数:


修改原有配置.png

为了更好的辨识,重启了 bootstrap,发现 websocket client 有了两个链接。
2021-01-21 00:18:11.966  INFO 775 --- [           main] b.s.s.d.w.WebsocketSyncDataConfiguration : you use websocket sync soul data.......
2021-01-21 00:18:12.022  INFO 775 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket connection is successful.....
2021-01-21 00:18:12.347  INFO 775 --- [           main] o.d.s.p.s.d.w.WebsocketSyncDataService   : websocket connection is successful.....

由此可知,我们的配置目前为止是生效的。

soul websocket 同步的流程

接着 WebsocketSyncDataService 往下看:

clients.add(new SoulWebsocketClient(new URI(url), Objects.requireNonNull(pluginDataSubscriber), metaDataSubscribers, authDataSubscribers));

这里有个创建 SoulWebsocketClient 的操作,我们进入此类,发现它集成了 WebSocketClient 类,

  • onOpen(final ServerHandshake serverHandshake) 原文注释:Called after an opening handshake has been performed and the given websocket is ready to be written on. 大体的意思是说:在链接服务端后调用此方法
  • onMessage(final String result) 原文注释:Callback for string messages received from the remote host;大体意思是说:从远端服务器上接受到字符串信息后调用
  • onClose(final int i, final String s, final boolean b) 原文注释:Called after the websocket connection has been closed.
  • onError(final Exception e) 原文注释:Called when errors occurs.

当服务端,也就是 admin 编辑信息后会发送 message ,这时候会调用 onMessage 的方法。后台更新 selector 时的调试


调试

经过一波 debug ,得出下面这张图:


数据websocket同步的流程图.png

总结:1. 还需要深入的是: websocket 的使用 demo,和使用场景

你可能感兴趣的:(soul 网关入门篇(六):数据同步方式之 websocket)