Soul網關同步數據之Zookeeper
調整配置
pom文件中註釋掉原來默認的websocket同步方式,改爲zookeeper同步。
<!--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>
<!--soul data sync start use websocket-->
<!--<dependency>-->
<!--<groupId>org.dromara</groupId>-->
<!--<artifactId>soul-spring-boot-starter-sync-data-websocket</artifactId>-->
<!--<version>${project.version}</version>-->
<!--</dependency>-->
同理註釋掉yml問價中的默認的websocket配置修改爲zookeeper配置
zookeeper:
url: localhost:2181
sessionTimeout: 5000
connectionTimeout: 2000
對應的網關soul-bootstrap層根據官方文檔做對應的設置
根據上一文的調試過程。我們同樣找到了zookeeper對應的配置文件和加載的代碼
從傳遞格式可以看到與websocket的同步的配置基本一樣,但是同樣的,我在這裏斷點調試時 final ObjectProvider
緊接着。我發現CommonPluginDataSubscriber類上並沒有Spring中相關的註解。那麼他是如何被注入到spring中的呢。於是我又進行了全局搜索,發現這個類在soul-web模塊中的SoulConfiguration模塊中進行了注入
@Bean
public PluginDataSubscriber pluginDataSubscriber(final ObjectProvider<List> pluginDataHandlerList) {
return new CommonPluginDataSubscriber(pluginDataHandlerList.getIfAvailable(Collections::emptyList));
}
同時可以發現這個類中有其他轉發和插件處理等相關邏輯。這個後續的分析可能會用到,值得關注一下
另外可以看到上述列表中同樣適用了ObjectProvider來注入插件數據處理類。利用這個線索。我們可以全局搜索一下PluginDataHandler相關的類,搜索後發現,基本每一個插件都是類似的這種做法Configuration-->PluginDataHandler
同時,可以知道數據流向RateLimiterConfiguration-->RateLimiterPluginDataHandler-->SoulConfiguration-->pluginDataSubscriber-->ZookeeperSyncDataConfiguration
同時在ZookeeperSyncDataService我們可以看到基於zookeeper的客戶端進行了選擇器和規則,元數據和權限相關的數據同步操作。關於這一部分的內容,後續我們繼續查看如何進行的數據同步
同時,後面我們會講解一些關於響應式編程的相關內容,例如Mono和Flux
歡迎搜索關注本人與朋友共同開發的微信面經小程序【大廠面試助手】和公衆號【微瞰技術】,以及總結的分類面試題https://github.com/zhendiao/JavaInterview