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裏幹了什麼。

好了,今天就到這裏了,希望對學習理解有幫助,大神看見勿噴,僅爲自己的學習理解,能力有限,請多包涵。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章