-
Soul网关websocket同步数据
websocket同步数据
初始化属性部分
首先启动soul-admin项目,然后启动soul-boostrap项目,可以明显发现websocket连接成功
奇怪的是,使用昨天测试SpringCloud的数据库发现webosocket无法连接成功。后续可以继续尝试下这种问题发生的原因
分析pom文件的依赖可知。由于soul-boostrap是springboot项目,所以websocket相关的配置是从soul-spring-boot-starter-sync-data-websocket加载
这个例子中涉及到starter相关的知识不做解读了。在这个configration中通过注入bean注入了websocket的配置以及几个空的订阅器包括插件订阅器pluginSubscriber,元数据订阅器metaSubscribers和认证订阅器authSubscribers用来监听admin项目的数据的改变。
此处的websocketConfig属性由配置文件注入。其他属性特别是pluginSubscriber数据的ObjectProvider是Spring4.3之后的一个新特性。简单来说就是可以代替@Autowired的作用。具体的示例,可以参考https://www.cnblogs.com/fightingting/p/14300409.html 和 https://www.cnblogs.com/fengxueyi/p/13888562.html
数据准备和连接部分
从代码可以看到。对于websocket这一块。做好了多个websocket的连接的做法。随后阻塞的连接每个客户端。然后利用线程池每隔30秒检测是否关闭。关闭的话回去尝试重连接。如果不能重新连接会抛出错误
发送消息部分
关于websocket发送消息的部分,我之前使用spring-websocket做过一个类似的案例https://zhaozhen.blog.csdn.net/article/details/80356392 。其实主要就是利用onMessage来传递数据。即在修改时由admin发送数据。随后网关部分做相应操作
接下来有了这样的问题。接收到了数据之后WebsocketDataHandler的executor并没有实现什么实际的操作,这个需要后续在组件操作时继续研究
问题
- 在保存有其他同步机制的情况下,websocket的通信问题
- 数据变化时WebsocketDataHandler的executor会做什么样的操作