1,概述
Soul 是基于 WebFlux實(shí)現(xiàn)的響應(yīng)式的 API 網(wǎng)關(guān),具有異步、高性能、跨語言等特點(diǎn),接下來,我們將從環(huán)境部署開始,一層層撥開她,進(jìn)行行一場靈魂的碰撞!
項(xiàng)目github地址:https://github.com/Dromara/soul
clone 項(xiàng)目:
使用:mvn clean package install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true -Drat.skip=true -Dcheckstyle.skip=true命令編譯項(xiàng)目
2,部署

上圖簡易部署admin和bootstrap,隨著學(xué)習(xí)的深入逐漸完善各部組件的源碼實(shí)現(xiàn)!
啟動admin后,登錄:admin/123456
2.1,啟動admin分析
查看配置文件application.yml

紅色框出的作用:(猜測一下是:開啟websocket,sync同步?-->同步開啟websocket?使用websocket的原因是啥?)
這時(shí)框圖變成這樣:

查看同websocket有關(guān)的類,一般情況下在配置類:WebsocketSyncProperties;全局文本搜索WebsocketSyncProperties;

這個(gè)@Configuration里面分別@Bean三個(gè):WebsocketDataChangedListener;WebsocketCollector;ServerEndpointExporter具體作用后面在詳解;但是可以發(fā)現(xiàn):WebsocketCollector 這個(gè)類被@ServerEndpoint("/websocket")所修飾;說明這個(gè)websocket是服務(wù)端;
而這個(gè)類的類名:DataSyncConfiguration ---->中文釋義:數(shù)據(jù)同步配置在進(jìn)一步推導(dǎo):使用websocket進(jìn)行數(shù)據(jù)同步;
這時(shí)我們的框圖就是這樣的:

2.2 Soul-bootstrap啟動分析:

(1)紅色框中1的部分說明:在啟動bootstrap過程中就去加載插件。進(jìn)入SoulConfiguration搜索load plugin:
@Bean("webHandler") public SoulWebHandler soulWebHandler(final ObjectProvider<List<SoulPlugin>> plugins) { List<SoulPlugin> pluginList = plugins.getIfAvailable(Collections::emptyList); final List<SoulPlugin> soulPlugins = pluginList.stream() .sorted(Comparator.comparingInt(SoulPlugin::getOrder)).collect(Collectors.toList()); soulPlugins.forEach(soulPlugin -> log.info("load plugin:[{}] [{}]", soulPlugin.named(), soulPlugin.getClass().getName())); return new SoulWebHandler(soulPlugins); }debugger進(jìn)入:

證明是分析是對的!
(2)紅色方框2:說明建立了一個(gè)websocket連接;
如上述閱讀方法:進(jìn)入WebsocketSyncDataConfiguration類:看到這個(gè)注解@ConditionalOnProperty(prefix = "soul.sync.websocket", name = "urls")
再看配置文件:發(fā)現(xiàn)
soul :
file:
enabled: true
corss:
enabled: true
dubbo :
parameter: multi
sync:
websocket :
urls: ws://localhost:9095/websocket
這個(gè)地址不就是:admin的websocket服務(wù)端嗎?
3,第一節(jié)框圖
到此時(shí)我們的框圖如下:

4,總結(jié)

感受:閱讀源碼需要大膽假設(shè),并結(jié)合日志,配置文件分析源碼;當(dāng)然了一個(gè)好的項(xiàng)目,類名,方法名的命名對閱讀源碼有很大的幫助!在此不得不,感受貓大的強(qiáng)大!充實(shí)的一天,明天繼續(xù)...