上一篇中介绍了使用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.getEventType

最低0.47元/天 解锁文章
961

被折叠的 条评论
为什么被折叠?



