任务

启动admin,与网关。 admin操作,使用zookeeper同步数据到网关

zookeeper 同步

打开 zookeeper 同步策略,启动 admin。

引入 zookeeper 的依赖,配置 zookeeper 的信息,启动网关。启动后可以看到同步日志:zookeeper state changed (SyncConnected)

1
2
3
4
5
6
<!--soul data sync start use zookeeper-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-sync-data-zookeeper</artifactId>
<version>${project.version}</version>
</dependency>
1
2
3
4
5
6
soul:
sync:
zookeeper:
url: localhost:2181
sessionTimeout: 5000
connectionTimeout: 2000

启动 http-example 工程,发起请求,发现 http 请求失败。但是,切换回 websocket 同步之后,接口访问又是正常的。

1
{"code":-106,"message":"Can not find url, please check your configuration!","data":null}

没有太多头绪,就看下 soul-sync-data-zookeeper 工程,看下 zookeeper 的数据同步逻辑。主要逻辑是依赖 zookeeper 的 watch 机制。

1
2
3
4
5
6
7
8
9
10
public ZookeeperSyncDataService(final ZkClient zkClient, final PluginDataSubscriber pluginDataSubscriber,
final List<MetaDataSubscriber> metaDataSubscribers, final List<AuthDataSubscriber> authDataSubscribers) {
this.zkClient = zkClient;
this.pluginDataSubscriber = pluginDataSubscriber;
this.metaDataSubscribers = metaDataSubscribers;
this.authDataSubscribers = authDataSubscribers;
watcherData();
watchAppAuth();
watchMetaData();
}

太困了…明晚补充总结

Link