linux上soul网关开通,soul 网关入门篇(八):数据同步方式之 nacos

初识 Nacos

Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施,

能快速实现动态服务发现、服务配置、服务元数据及流量管理,是 alibaba 开源注册中心中间件。

b8aeb5d7d560

nacos地图

数据流程

了解了 nacos 的基本概念之后,我们继续昨天的话题,昨天配置 nacos 的数据同步方式时,出现了一个 bug。虽然后面利用配置好的各种数据,按同步按钮还是能启动的。但是这么做就不是那么的完美。那我们今天来 Debug 一下他的一个流程。

soul-admin 端

我们将断点打在 DataChangedEventDispatcher#afterPropertiesSet 的方法下,启动 admin, 发现断点是可以到这里的。

b8aeb5d7d560

nacos 同步

执行完后启动成功,请注意这里是没有初始化 nacos 步骤的,这几天应该会把这个优化掉,因为 zookeeper 是有 初始化这个步骤的。

当断点打在 DataChangedEventDispatcher#onApplicationEvent 的 plugin case 时, 点击 admin 后台 System Manage > Plugin > Synchronized All Data 时,出现了以下情况,说明已经成功这步。

b8aeb5d7d560

plugin

查看 nacos 的后台,soul.plugin.json, soul.auth.json, soul.selector.json, soul.rule.json, soul.meta.json 这些 data-id 是否都存在。如果都存在,说明到 nacos 的数据同步已经完成。

同步数据到 nacos 大致流程如下:

b8aeb5d7d560

同步到nacos

bootstrap 端

根据启动 bootstrap,我们在命令行终端查看到

2021-01-23 07:31:01.211 INFO 13161 --- [ main] d.s.s.s.s.d.n.NacosSyncDataConfiguration : you use nacos sync soul data.......

全文检索日志得知,NacosSyncDataConfiguration 会在启动时注册3个 bean,

NacosSyncDataService : Nacos 数据同步的服务

查看他的构造函数: NacosSyncDataService :

public NacosSyncDataService(final ConfigService configService, final PluginDataSubscriber pluginDataSubscriber,

final List metaDataSubscribers, final List authDataSubscribers) {

super(configService, pluginDataSubscriber, metaDataSubscribers, authDataSubscribers);

start();

}

start() 会去更新 updatePluginMap,这时 pluginDataSubscriber 会重新订阅这条插件数据,然后更新缓存

ConfigService: Nacos config service

NacosConfig : nacos 的配置

然后我在更新一条数据,start() 中的 watcherData() ,会监听到配置的改变,

protected void watcherData(final String dataId, final OnChange oc) {

Listener listener = new Listener() {

@Override

public void receiveConfigInfo(final String configInfo) {

oc.change(configInfo);

}

@Override

public Executor getExecutor() {

return null;

}

};

oc.change(getConfigAndSignListener(dataId, listener));

LISTENERS.getOrDefault(dataId, new ArrayList<>()).add(listener);

}

然后进行数据的改变。大致的流程图如下:

b8aeb5d7d560

nacos 同步到网关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要取得Nacos配置中心中的List类型配置,需要使用Nacos提供的Java SDK,具体步骤如下: 1. 引入Nacos Java SDK的依赖,可以在Maven中添加如下依赖: ```xml <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${nacos.version}</version> </dependency> ``` 2. 在代码中使用Nacos SDK获取配置,示例代码如下: ```java import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import com.alibaba.nacos.api.exception.NacosException; import java.util.List; import java.util.Properties; import java.util.concurrent.Executor; public class NacosConfigExample { public static void main(String[] args) throws NacosException { String serverAddr = "localhost:8848"; // Nacos服务地址 String dataId = "example"; // 配置ID String group = "DEFAULT_GROUP"; // 配置分组 Properties properties = new Properties(); properties.put("serverAddr", serverAddr); ConfigService configService = NacosFactory.createConfigService(properties); String content = configService.getConfig(dataId, group, 5000); // 获取配置内容,超时时间为5000ms // 将List类型的配置转换为List对象 List<String> list = Arrays.asList(content.split(",")); // 监听配置变化 configService.addListener(dataId, group, new Listener() { @Override public void receiveConfigInfo(String configInfo) { // 配置变化后的处理逻辑 List<String> list = Arrays.asList(configInfo.split(",")); // ... } @Override public Executor getExecutor() { return null; } }); } } ``` 在获取配置之后,可以将List类型的配置内容转换为List对象进行处理。同时,可以使用addListener方法监听配置的变化,当配置发生变化时,会触发Listener中的回调函数,从而进行相应的处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值