上一篇中介绍了使用websocket同步数据,soul也可以使用zk来同步数据
1.配置
引入 zk 相关的jar包
soul-admin中打开zk配置
soul-bootstrap中打开 zk配置
因为使用zk,需要单独启动一个zk。
引用 soul-spring-boot-starter-sync-data-zookeeper
2. 配置加载
2.1 soul-admin 端
admin端使用spring的事件注册机制在更改配置时发送事件,将修改的配置发送出去。接收事件后将获取的配置修改到zk的节点上。
下面看下源码
2.1.1 发布事件
每个service都会注入 eventPublisher
用来发布配置修改的事件 DataChangedEvent
。
2.1.2 接收事件
DataChangedEventDispatcher
用来接收 DataChangedEvent
事件,该类会加载容器内配置的 DataChangedListener
public class DataChangedEventDispatcher implements ApplicationListener<DataChangedEvent>, InitializingBean {
private ApplicationContext applicationContext;
private List<DataChangedListener> listeners;
public DataChangedEventDispatcher(final ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
// 接收 DataChangedEvent事件后使用循环DataChangedListener处理事件
@Override
@SuppressWarnings("unchecked")
public void onApplicationEvent(final DataChangedEvent event) {
for (DataChangedListener listener : listeners) {
switch (event.getGroupKey()) {
case APP_AUTH:
listener.onAppAuthChanged((List<AppAuthData>) event.getSource(), event.getEventType());
break;
case PLUGIN:
listener.onPluginChanged((List<PluginData>) event.getSource(), event.getEventType());
break;
case RULE:
listener.onRuleChanged((List<RuleData>) event.getSource(), event.get