Soul网关源码阅读(九)—— 数据同步之WebSocket

本文深入解析Soul网关如何通过WebSocket与Admin进行数据同步,包括配置类WebsocketSyncDataConfiguration、数据同步服务WebsocketSyncDataService、事件调度器DataChangedEventDispatcher以及监听器WebsocketDataChangedListener的工作原理,阐述数据同步的完整流程。
摘要由CSDN通过智能技术生成

Soul网关源码阅读(九)—— 数据同步之WebSocket

概要

之前我们简单介绍了soul网关是通过admin进行数据同步的,这一篇我们来消息介绍一下soul网关使用websocket来进行数据同步的关机设计和详细流程。

流程图

在这里插入图片描述

详细解析

1. WebsocketSyncDataConfiguration

首先知道网关与admin之间需要同步的数据类型有哪些:

  • 插件Plugin
  • 元数据MetaData
  • 认证数据AuthData

我们那需要为每一种数据类型编写不同的业务逻辑:

  • PluginDataSubcriber
  • MetaDataSubcriber
  • AuthDataSubscriber

这里我们Websocket下对应实现类分别是:

  • CommonPluginDataSubscriber
  • MetaDataAllSubscriber
  • SignAuthDataSubscriber

WebsocketSyncDataConfiguration配置类,组合了以上对象,并且初始化了WebsocketSyncDataService对象。WebsocketSyncDataService对象是用来进行数据同步的类型,它组合了一个WebSocketClient用来与admin服务进行socket通信。

2. WebsocketSyncDataService

WebsocketSyncDataService在初始化的时候,会出发WebSocketClient初始化并且通过websocket连接到admin,连接到配置的端口:ws://localhost:9095/websocket

Admin服务WebSocketCollectoronMessage方法会触发soul的请求:

    @OnMessage
    public void onMessage(final String message, final Session session) {
   
        if (message.equals(DataEventTypeEnum.MYSELF.name())) {
   
            try {
   
                ThreadLocalUtil.put(SESSION_KEY, session);
                SpringBeanUtils.getInstance().getBean(SyncDataService.class).syncAll(DataEventTypeEnum.MYSELF);
            } finally {
   
                ThreadLocalUtil.clear();
            }
        }
    }

Admin中通过SyncDataServiceImpl来syncAll方法来进行所有数据类型的同步,由于是soul刚启动,所以需要同步全量数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值