Soul网关-day06

Soul网关-day06

Soul-websocket完成互相通信

昨天的坑还没填完,拉了最新的代码以后总是报无权限的错误,并且报token为null,虽然找到了代码的具体位置,但还没形成整体框架,排查起来有点抓瞎,还是需要看看别的同学怎么做的…
要开始新一周的任务了:启动admin,与网关;用admin操作,使用websocket同步数据到网关:
记得以前在分析soul-admin的配置的时候,看到过admin使用了websocket协议进行通信,那么怎么样将这个协议运用到soul网关并进行通信呢?
首先要在soul-bootstrap引入soul-spring-boot-starter-sync-data-websocket这个依赖,soul是用SPI对类进行加载的,我之前一直再找spring.factories文件似乎没找到,真是犯了很低级的错误…
言归正传,引入这个依赖主要是需要将WebsocketSyncDataConfiguration这个类自动注册进Spring中.
然后需要在soul-bootstrap进行配置,如下所示:
在这里插入图片描述
之前上秦大哥的课的时候,秦大哥在讲spring自动化配置的时候说过,有些factories会根据属性有没有配,来对类进行加载。这里应该就是一个例子了。
WebsocketSyncDataConfiguration 会创建一个 WebsocketSyncDataService 对象,即创建了一个webSocket客户端;创建客户端代码的逻辑如下所示:

   public WebsocketSyncDataService(final WebsocketConfig websocketConfig,
                                    final PluginDataSubscriber pluginDataSubscriber,
                                    final List<MetaDataSubscriber> metaDataSubscribers,
                                    final List<AuthDataSubscriber> authDataSubscribers) {
        String[] urls = StringUtils.split(websocketConfig.getUrls(), ",");
        executor = new ScheduledThreadPoolExecutor(urls.length, SoulThreadFactory.create("websocket-connect", true));
        for (String url : urls) {
            try {
                clients.add(new SoulWebsocketClient(new URI(url), Objects.requireNonNull(pluginDataSubscriber), metaDataSubscribers, authDataSubscribers));
 			//其他代码...
        }
        try {
            for (WebSocketClient client : clients) {
                boolean success = client.connectBlocking(3000, TimeUnit.MILLISECONDS);
                //根据连接结果进行日志输出... 
                
                //我们可以看到这里有个定时任务线程池,在客户端连接关闭后,会定时尝试重新连接。
                executor.scheduleAtFixedRate(() -> {
                    try {
                        if (client.isClosed()) {
                            boolean reconnectSuccess = client.reconnectBlocking();
                    		//根据重连情况进行日志输出...
                        }
                    } catch (InterruptedException e) {
                        log.error("websocket connect is error :{}", e.getMessage());
                    }
                }, 10, 30, TimeUnit.SECONDS);
            }
        } catch (InterruptedException e) {
            log.info("websocket connection...exception....", e);
        }

    }

这个时候将soul-admin和soul-bootstrap启动起来,websocket连接就会创建成功;如果接下来数据发生了变动,soul-admin就会向客户端发送消息,数据就及时的同步到内存中。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值