Spring Cloud 2.2.2 源碼之五十一nacos服務端處理監聽配置請求一
監聽配置
原理官網已經說了很清除了,不過我們還是看下源碼,前面的客戶端長輪詢任務說過,會被服務器掛起,現在我們看服務器源碼,看爲什麼會掛起,掛起當中如果有配置改變又是如何立即響應的。
客戶端的LongPollingRunnable
這個已經講過了,他會一直去請求監聽端口,但是如果沒有緩存配置是初始化的,就會被掛起,有配置修改會立即響應,否則就會立即返回。
這兩個頭信息很關鍵,會影響到服務端的處理,馬上就說。
服務端的ConfigController的listener
直接看關鍵的.
ConfigServletInner的doPollingConfig
LongPollingService的isSupportLongPolling是否支持長輪詢
就是客戶端的頭信息,上面就說了。
LongPollingService的addLongPollingClient添加長輪詢客戶端
首先會看是否有不掛起的標誌,也是客戶端傳來的,緩存配置初始化的時候就不掛起,否則會掛起。
默認掛起時間29.5
秒:
如果支持固定輪詢的話,最大是10
秒掛起。
檢查MD5是否改變和不掛起情況
否則就比對客戶端發來的MD5
,是否有改變,有改變的話就立即生成響應,否則就判斷是否有不掛起標記,有的話就直接返回,因爲沒有改變,也不掛起,就返回了。
返回成功。
MD5沒改變,要掛起的情況
創建一個異步的上下文,然後創建ClientLongPolling
任務,將上下文,超時等信息封裝進去,然後調度ClientLongPolling
任務。
調度器有個10
秒間隔的任務StatTask
,而且是單線程的,所以新的ClientLongPolling
任務會排隊,等待他完成後纔會調度,所以最長要等10
秒會進行處理:
下篇說ClientLongPolling
裏幹了什麼。
好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。