soul源码学习(九)-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文件需要引入如下依赖

<dependency>
    <groupId>org.dromara</groupId>
    <artifactId>soul-spring-boot-starter-sync-data-zookeeper</artifactId>
    <version>${project.version}</version>
</dependency>

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
在这里插入图片描述
3. 启动soul-admin后,手动刷新插件后信息后,配置不能同步至nacos,需要在nacos设置命名空间,并将命名空间对应的id(由nacos自动生成)设置到soul-boostrap和soul-admin中,然后重启再次刷新,配置信息,可以发现插件信息已同步至nacos中
命名空间的设置如图:
在这里插入图片描述
同步后的信息如图:
在这里插入图片描述
需要注意的是,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. 在这里插入图片描述
    在将发生变化的配置信息组装成nacos所需的格式,通过publishConfig主动向nacos推送配置,对应代码如下:
    在这里插入图片描述
    调用nacos提供的api向服务器推送其配置信息

  3. soul-bootstrap启动之后,会触发注册监听nacos流程,关键代码如下:
    在这里插入图片描述
    watchData的实现逻辑如下:
    在这里插入图片描述
    其实就是注册监听程序,通过回调函数来处理接收到的配置信息

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值