soul-bootstrap 如何同步网关数据
Nacos数据同步和zookeeper数据同步相似,都是通过监听数据变化来实现。
-
soul-bootstrap 添加了nacos依赖 soul-spring-boot-starter-sync-data-nacos,服务启动后会自动注入NacosSyncDataConfiguration
public class NacosSyncDataConfiguration { // 实例化一个数据同步服务。 public SyncDataService nacosSyncDataService(); // 创建nacos配置服务 public ConfigService nacosConfigService(); // 注册配置文件yml配置的参数到配置服务 @ConfigurationProperties(prefix = "soul.sync.nacos") public NacosConfig nacosConfig() { return new NacosConfig(); } }
-
NacosSyncDataService
继承了NacosCacheHandler
,初始化会执行 start,监听数据、更新数据到内存->watcherData(PLUGIN_DATA_ID, this::updatePluginMap);public void start() { watcherData(PLUGIN_DATA_ID, this::updatePluginMap); watcherData(SELECTOR_DATA_ID, this::updateSelectorMap); watcherData(RULE_DATA_ID, this::updateRuleMap); watcherData(META_DATA_ID, this::updateMetaDataMap); watcherData(AUTH_DATA_ID, this::updateAuthMap); }
-
根据之前的经验知道 这里根据传入的dataId 调用相应的处理。
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.computeIfAbsent(dataId, key -> new ArrayList<>()).add(listener); }
-
调用相应的subScribe进行相应的更新。