soul网关-3-数据同步机制之websocket

大概一年前,我接到了一个网管系统的API管理后台的维护工作,当时那个系统的架构是这样子的:

老系统的数据同步方式

  • 1.管理员在管理后台上更新数据
  • 2.数据都存储到DB里面
  • 3.crontab定时任务从DB里面读取表数据,组成某种格式,写入配置文件,存到磁盘
  • 4.网关系统发现磁盘上的配置文件的更新时间有变化,则重新载入配置文件到内存

这个老系统使用crontab的方式定时从数据库里读取数据,肯定是不够实时的。而且还和管理后台读了同一个数据库,有一定的耦合。

今天继续来进行soul网关源码的学习,看下soul网关的数据同步机制。

首先,先看官方文档里面关于数据同步的相关介绍,找到了数据同步原理数据同步策略的介绍。

快速浏览了一下官方文档,发现soul网关2.x版本支持通过websocket、zookeeper、http长轮询、nacos四种同步方式,其中websocket是默认的方式。

WebSocket是一种网络传输协议,可在单个TCP连接上进行全双工通信。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。各大浏览器都已经支持WebSocket,最贴近我们生活的就是聊天应用。聊天应用不用http的原因是http只能由客户端发起请求,要获取最新数据的话,只能起一个定时任务来轮询,但是轮询的效率低,非常浪费资源,聊天应用使用websocket就可以实时收到别人发过来的消息了。

本文主要学习一下websocket同步方式。看到官方文档里面对websocket的介绍:

websocket 和 zookeeper 机制有点类似,将网关与 admin 建立好 websocket 连接时,admin 会推送一次全量数据,后续如果配置数据发生变更,则将增量数据通过 websocket 主动推送给 soul-web
使用websocket同步的时候,特别要注意断线重连,也叫保持心跳。soul使用java-websocket 这个第三方库来进行websocket连接。

soul网关的源码里面这么多代码,一个个看过去是不行的,太浪费时间,而且很容易就放弃了。我们要找一个切入点。

soul使用java-websocket 这个第三方库来进行websocket连接这个官方文档里面的信息,就是我本次的切入点。

首先在IDEA里面全局搜索一下java-websocket这个关键字,发现在主pom和soul-sync-data-center这个子模块的pom里面出现了。在第一篇笔记里面已经对soul源码的模块的大致作用分析了一下,soul-sync-data-center这个模块主要是负责数据同步的。

java-websocket全局搜索
soul-sync-data-center里面找到websocket相应的位置,看到里面文件不多,可以挨个点开快速看一下

soul-sync-data-websocket目录结构

其中最主要的文件是WebsocketSyncDataService,这个里面进行了websocket连接和断线重连(30s)。与官方文档上的示例代码有一点出入,应该是官方文档更新不及时。不过变动不大,并不影响我们继续看下去。

在这里插入图片描述

可以看到使用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值