总系列目录地址
上篇soul数据同步websocket
数据同步配置
- soul-admin
sync: websocket: enabled: false zookeeper: url: localhost:2181 sessionTimeout: 5000 connectionTimeout: 2000
- soul-bootstrap
maven删除其他数据同步依赖,同时添加zookeeper依赖包sync: # websocket : # urls: ws://localhost:9095/websocket zookeeper: url: localhost:2181 sessionTimeout: 5000 connectionTimeout: 2000
<!--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>
数据自动加载
public class DataSyncConfiguration {
@Configuration
@ConditionalOnProperty(prefix = "soul.sync.zookeeper", name = "url")
@Import(ZookeeperConfiguration.class)
static class ZookeeperListener {...}
}
数据监听
上篇websocket数据同步已经分析过。zookeeper数据同步与websocket基本一样。
- org.dromara.soul.admin.listener.DataChangedEventDispatcher.onApplicationEvent
在onApplicationEvent 里执行 listener.onXXXChanged 监控数据。listener的实现取决于数据同步maven依赖包的添加,所有同时添加多个同步策略,所有同步策略都会执行一次,推荐配置一种数据同步策略。 - org.dromara.soul.admin.listener.zookeeper.ZookeeperDataChangedListener
配置了zookeeper数据同步,listener实现类为ZookeeperDataChangedListener,监听到数据后写到zookeeper。
网关侧数据同步
- org.dromara.soul.sync.data.zookeeper.ZookeeperSyncDataService
通过zkClient订阅数据,监听所有数据。初始化阶段会同步所有数据到缓存里面。
经过测试,只有在数据改变是才会更新zookeeper的数据到缓存。
总结
zookeeper数据同步方式与websocket一样,通过配置starter和修改一下yml文件就可以使用。soul-admin和soul-bootstrap要使用统一的数据同步方式。
数据同步方式的具体实现完全不同,与soul的插件设计理念一致,都是简单配置,只在具体实现上不一样,实现代码的解耦和清晰化。