soul源码学习(九)-nacos数据同步

文章目录

  • 分析前准备
    • 环境配置
    • nacos启动单实例
  • 数据同步过程
  • 源码分析

分析前准备

环境配置

  1. soul-admin配置
soul:
  database:
    dialect: mysql
    init_script: "META-INF/schema.sql"
    init_enable: true
  sync:
    nacos:
      url: localhost:8848
      namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
      acm:
        enabled: false
        endpoint: acm.aliyun.com
        namespace:
        accessKey:
        secretKey:
  1. soul-bootstrap配置
soul :
    file:
      enabled: true
    corss:
      enabled: true
    dubbo :
      parameter: multi
    sync:
      nacos:
        url: localhost:8848
        namespace: 1c10d748-af86-43b9-8265-75f487d20c6c
        acm:
          enabled: false
          endpoint: acm.aliyun.com
          namespace:
          accessKey:
          secretKey:

pom文件需要引入如下依赖


    org.dromara
    soul-spring-boot-starter-sync-data-zookeeper
    ${project.version}

nacos启动单实例

  1. 下载nacos,版本号为1.4.1,详见nacos官网
  2. 启动nacos,可参考官网快速开始部分,有两种启动方式集群和非集群方式,本篇默认以非集群方式启动(仅测试环境使用),启动命令如下:
cd nacos/bin
sh startup.sh -m standalone

启动成功后,默认在8848端口运行,访问http://localhost:8848/nacos/#/login,默认用户名和密码nacos/nacos
soul源码学习(九)-nacos数据同步_第1张图片
3. 启动soul-admin后,手动刷新插件后信息后,配置不能同步至nacos,需要在nacos设置命名空间,并将命名空间对应的id(由nacos自动生成)设置到soul-boostrap和soul-admin中,然后重启再次刷新,配置信息,可以发现插件信息已同步至nacos中
命名空间的设置如图:
soul源码学习(九)-nacos数据同步_第2张图片
同步后的信息如图:
soul源码学习(九)-nacos数据同步_第3张图片
需要注意的是,rule和selector等相关信息,并未同步,手动刷新也不能同步,必须相关规则有发生变更才能同步。经过分析得出以下结论,soul-amdin有两块手动同步的操作:
(1)plugin的同步
(2)plugin内部的selector和rule的同步
先分析soul-admin已经提前有数据,而nacos没有数据的情况,
手动同步plugin可以同步成功,同步内部selector和rule并没有成功,需要手动变更才能成功,因此可以猜测plugin没有缓存,同步时直接从数据库读取同步,selector和rule在admin内部有缓存,同步时会先判断数据库与缓存是否一致,不一致才会同步,一致不同步,所以直接点击同步按钮,并不会同步,没有发生变更,想要同步成功需要改变规则。
接着分析soul-admin没有任何数据,即应用还未将注册信息注册到soul-admin,此时soul-admin和nacos都开启,接着启动examples示例,可以发现,首次注册时,会触发selector和rule同步操作

关于zookeeper在soul-admin在启动时会有全量同步的操作,而nacos没有,猜测可能是zookeeper是将数据存在内存中,重启有丢失的风险,而nacos没有,是因为nacos有自己单独的存储策略,重启不会丢失,待后续验证

数据同步过程

目前版本boot-admin启动后并不会主动向nacos推送配置中心,需要在soul-admin中进行手动全量同步,才会将配置信息推送给nacos,soul-bootsrap启动后会自动watch对应分组信息,当有数据变更后,会及时收到对应信息,整个过程类似zookeeper

源码分析

  1. soul-admin在得到配置信息改变的情况下,会通过事件分发程序调用对应的DataChangedListener,此处对应NacosDataChangedListener,关键代码如下:

  2. soul源码学习(九)-nacos数据同步_第4张图片
    在将发生变化的配置信息组装成nacos所需的格式,通过publishConfig主动向nacos推送配置,对应代码如下:
    在这里插入图片描述
    调用nacos提供的api向服务器推送其配置信息

  3. soul-bootstrap启动之后,会触发注册监听nacos流程,关键代码如下:
    soul源码学习(九)-nacos数据同步_第5张图片
    watchData的实现逻辑如下:
    soul源码学习(九)-nacos数据同步_第6张图片
    其实就是注册监听程序,通过回调函数来处理接收到的配置信息

你可能感兴趣的:(soul源码分析)