Soul API网关源码解析10-数据同步篇

目标

  • Nacos简单介绍

    • Nacos 关键特性
    • Nacos 服务搭建启动
  • soul-admin nacos配置启动

    • 添加Soul-Nacos依赖
    • 修改yml配置文件
    • 启动admin会看到Nacos网页上有四个数据
    • 介绍Nacos在Admin启动流程
    • DataSyncConfiguration初始化NacosBean
  • admin数据发生变动发布流程

  • 总结

Nacos简单介绍

image.png

上图从特性、架构、业务、生态、优势、战略等六个方面介绍了Nacos的核心功能

  • Nacos(Dynamic Naming and Configuration Service):从全称我们看得出来他是动态命令和配置服务,是Spring Cloud Alibaba的一个组件。
  • Nacos数据模型Key由三元组唯一确定,Namespace默认是空串,公共命名空间(public),分组默认是DEFAUTL_GROUP
  • Nacos致力于帮助我们发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助我们快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos关键特性

  • 服务发现和服务健康监测
  • 动态配置服务
  • 动态DNS服务
  • 服务及其元数据管理

Nacos服务搭建启动

image.png
  • 解压执行
image.png
  • 启动成功
image.png

Nacos 服务默认端口是8848,我们登陆localhost:8848/nacos 即可访问官方后台管理

  • 登陆后台查看
image.png

后面我们启动admin/bootstrap 就可以看到有数据注册上来

Soul-Admin的Nacos配置启动

添加Soul-Nacos依赖

<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>${nacos-client.version}</version>
</dependency>

修改yml配置文件

image.png

此处Soul默认只使用一种数据同步方式,所以将其他三种同步方式注释掉。只打开Nacos配置

启动admin会看到Nacos网页上有四个数据

image.png

注意点: 默认Nacos 是不会自动创建命名空间的,有些同学以为网页上看不到数据,就以为数据同步不起作用。经过测试这其实是Nacos展示这块没有根据发布数据来自动显示。如何做才能看到上图样子呢。

只需要点击命名空间,创建你配置文件配置的namespace的名称即可,本文namespace是1c10d748-af86-43b9-8265-75f487d20c6c。所以本文建立的命令为

image.png

介绍Nacos 在Admin启动流程

DataSyncConfiguration 初始化NacosBean

  • 初始化DataChangedListener 数据监听器
image.png

这里只是初始化Nacos客户端和监听数据监听器

  • 检查是否对Nacos数据进行上报
image.png

这里之前未做检查,其实我觉得没必要做检查,毕竟Nacos是全量更新,就算一开始拿不到数据,在后期数据变更时候,可以做一次全量更新。

admin 数据发生变动发布流程

@Override
public void onPluginChanged(final List<PluginData> changed, final DataEventTypeEnum eventType) {
// 这里进来先获取Nacos对应的数据,是考虑到多个admin,adminA 改了 adminB如何取到A改的值,这里就在adminB未重启的情况下,只要发生变化,就会重新拉取Nacos 的数据,来保证admin之间的数据同步
    updatePluginMap(getConfig(NacosPathConstants.PLUGIN_DATA_ID));
    switch (eventType) {
        case DELETE:
            changed.forEach(plugin -> PLUGIN_MAP.remove(plugin.getName()));
            break;
        case REFRESH:
        case MYSELF:
            Set<String> set = new HashSet<>(PLUGIN_MAP.keySet());
            changed.forEach(plugin -> {
                set.remove(plugin.getName());
                PLUGIN_MAP.put(plugin.getName(), plugin);
            });
            PLUGIN_MAP.keySet().removeAll(set);
            break;
        default:
            changed.forEach(plugin -> PLUGIN_MAP.put(plugin.getName(), plugin));
            break;
    }
    publishConfig(NacosPathConstants.PLUGIN_DATA_ID, PLUGIN_MAP);
}

总结

今天收获很大,由原来的的单机编程想法往集群方向的开发突破,Nacos 在集群环境下,admin端是如何知道A改了数据B端如何知道。使用Nacos 作为中间媒介,并且对应端数据发生变化先获取媒介上当前最新数据,然后在获取自己关心的数据,进行发布更新。

参考

soul github
soul document

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容