soul网关系列(十二):探寻soul网关项目的缓存流程(下)

探寻app_auth,meta_data的缓存流程

一、概述

在这里插入图片描述
昨天对soul网关项目里的PLUGIN 、SELECTOT 、RULE 的传递流程做了概括分析,今天我们对昨天分析过程中提到的APP_AUTH、META_DATA和CommonPluginDataSubscriber里的handerMap进行概括简单分析。

二、APP_AUTH缓存流程

APP_AUTH这块的数据比较独立,应用比较单一

  1. 和 PLUGIN 一样,网关的数据同步里,先是初始化相关实现
    soul-spring-boot-starter-sync-data-zookeeper(ZookeeperSyncDataService的构造函数里)
    soul-spring-boot-starter-sync-data-http(HttpSyncDataService的构造函数里)
    soul-spring-boot-starter-sync-data-websocket(WebsocketSyncDataService的构造函数里)
    soul-spring-boot-starter-sync-data-nacos(NacosSyncDataService的构造函数里)

在这里插入图片描述
2. 只有SignAuthDataSubscriber一个实例

public class SignAuthDataSubscriber implements AuthDataSubscriber {
    
    @Override
    //更新auth信息
    public void onSubscribe(final AppAuthData appAuthData) {
        SignAuthDataCache.getInstance().cacheAuthData(appAuthData);
    }
    
    @Override
    //取消auth信息
    public void unSubscribe(final AppAuthData appAuthData) {
        SignAuthDataCache.getInstance().removeAuthData(appAuthData);
    }
}
  1. SignAuthDataCache增/删/查缓存AUTH_MAP

在这里插入图片描述
5. obtainAuthData的使用者就是auth 插件里的具体处理逻辑了

三、META_DATA缓存流程

  1. 类似,有三个metaDataSubscriber

在这里插入图片描述

  • MetaDataAllSubscriber
  • SofaMetaDataSubscriber
  • AlibabaDubboMetaDataSubcriber
  1. MetaDataAllSubscriber里和上面的类似,统一使用MetaDataCache的META_DATA_MAP(ConcurrentMap)进行缓存,实现增/删/查,做后续逻辑
  2. SofaMetaDataSubscriber里,也实现了一个META_DATA(ConcurrentMap),实现增/删/查,做后续逻辑
  3. AlibabaDubboMetaDataSubcriber里,也实现了一个META_DATA(ConcurrentMap),实现增/删/查,做后续逻辑

缓存了三份META_DATA,这个是个PLUGIN最大的差异。META_DATA_MAP的key是path,PlUGIN_MAP的key是插件,层次不一样,后期我觉得可以像PlUGIN_MAP一样统一到CommonMetaDataSubscriber里。

四、CommonPluginDataSubscriber里的handerMap

昨天在CommonPluginDataSubscriber里除了直接更新plugin_map之外,还有个handerMap,简单看一下。

也是分发给各个PluginDataHandler去对plugin进行处理
看其中一个

public class DividePluginDataHandler implements PluginDataHandler {
    
    @Override
    public void handlerSelector(final SelectorData selectorData) {
        UpstreamCacheManager.getInstance().submit(selectorData);
    }
    
    @Override
    public void removeSelector(final SelectorData selectorData) {
        UpstreamCacheManager.getInstance().removeByKey(selectorData.getId());
    }
    
    @Override
    public String pluginNamed() {
        return PluginEnum.DIVIDE.getName();
    }
}
    
    //UpstreamCacheManager里的方法,更具体插件里的缓存信息的
    public void submit(final SelectorData selectorData) {
        final List<DivideUpstream> upstreamList = GsonUtils.getInstance().fromList(selectorData.getHandle(), DivideUpstream.class);
        if (null != upstreamList && upstreamList.size() > 0) {
            UPSTREAM_MAP.put(selectorData.getId(), upstreamList);
        } else {
            UPSTREAM_MAP.remove(selectorData.getId());
        }
    }

所以这些handler的作用域是具体到每个插件的缓存逻辑里,更新类的成员变量、缓存等信息。

五、小结

  • APP_AUTH :认证鉴权信息,目前只有auth插件有用。
  • META_DATA:元数据信息,主要针对dubbo框架,个别插件有用。
  • CommonPluginDataSubscriber中的handerMap:更插件的类的成员变量、缓存等信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值