SpringCloudAlibaba之Sentinel Dashboard服務端源碼剖析


我們先進入啟動類:com.alibaba.csp.sentinel.dashboard.DashboardApplication

 

 看到這里主要就是創建一個線程,然后調用了com.alibaba.csp.sentinel.init.InitExecutor#doInit方法,最后調用啟動線程

我們進入com.alibaba.csp.sentinel.init.InitExecutor#doInit方法中

 

 可以看到這里主要做三件事1、使用spi加載com.alibaba.csp.sentinel.init.InitFunc的一些實現類;2、將加載后的實現類進行排序;3、調用這些實現類的初始化方法

我們可以先看看他這里加載的四個實現類分別都是做什么的

com.alibaba.csp.sentinel.metric.extension.MetricCallbackInit

 

 我們進這個實現類里去看看里面都做了啥

進入com.alibaba.csp.sentinel.metric.extension.MetricCallbackInit

 

 我們可以看到這里主要是注冊擴展的入口和出口回調類

com.alibaba.csp.sentinel.slots.statistic.StatisticSlotCallbackRegistry中是一個map,存放了一些資源對應的回調信息

 

 

進入com.alibaba.csp.sentinel.metric.extension.callback.MetricEntryCallback

 

 我們可以看到這里主要就是兩個方法,一個是通過另一個是阻塞處理方案

我們再來看看出口回調中做了啥

進入com.alibaba.csp.sentinel.metric.extension.callback.MetricExitCallback

 

 可以看到這里主要就是做一些統計信息記錄

 這里不經意發現了一個com.alibaba.csp.sentinel.slotchain.SlotChainBuilder

 

我們都知道sentinel中的slot是一個比較核心的類,所以我們不妨點進去看看這里干啥了

 

 我們可以看到這里就是往com.alibaba.csp.sentinel.slotchain.ProcessorSlotChain中添加了一堆slot來構建一個chain

我們繼續往下

 

 

接下來我們看看com.alibaba.csp.sentinel.transport.init.CommandCenterInitFunc里做了啥

 

 我們可以看到這里主要做三件事1、獲取命令中心;2、調用beforeStart方法做一些准備工作;3、調用start方法,這里我們重點關注2和3

進入com.alibaba.csp.sentinel.transport.CommandCenter#beforeStart方法

 

 

 

 

可以看到這里主要就是獲取dashboard中的提供的接口然后獲取對應的處理器分別放入map中,當在dashboard中調用了對一個的接口之后都會觸發這些處理器進行處理

接下來我們看看com.alibaba.csp.sentinel.transport.command.SimpleHttpCommandCenter#start方法里又做了啥

 

 可以看到這里主要就是創建一個socket然后取監聽8719端口,而這個端口我們都知道這是sentinel與客戶端通信的端口號

接下來我們再看看com.alibaba.csp.sentinel.transport.init.HeartbeatSenderInitFunc中又做了啥

可以看到這里主要就是做一些心跳相關的任務初始化

ok到這里我們基本知道了啟動過程主要就是初始化一些接口的處理器、資源出入口回調以及心跳等信息的初始化,接下來我們具體操作配置一下流控規則看看是不是是怎么處理的

 

 

 

 可以看到這里主要做兩件事:1、創建一個實體並保存;2、通知客戶端

接下來我們重點關注通知客戶端的邏輯

 

 

可以看到這里主要就是獲取到選擇的客戶端的機器列表對應的規則,然后調用com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient#setFlowRuleOfMachine方法

 

 一路追尋,我們發現最后做走到了com.alibaba.csp.sentinel.dashboard.client.SentinelApiClient#executeCommand方法中而且我們發現這是一個執行命令的方法,而且api名稱我們也知道了

命令?之前啟動 的時候我們是不是看到他的命令相關的那個spi擴展?那里好像初始化了命令處理器吧?我們重新走一下流程看看

 

 果然,這里給定了處理器,那我們想這是不是在客戶端需要使用這個處理器進行事件處理呢?

 

 我們在客戶端的com.alibaba.csp.sentinel.command.handler.ModifyRulesCommandHandler中打斷點請求果然進來了

繼續跟進com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager#loadRules方法

 

 繼續跟進com.alibaba.csp.sentinel.property.DynamicSentinelProperty#updateValue方法

 

 這里主要就是對監聽器對新值的監聽

所以我們就知道了咱們再dashboard中定義規則,他會發送http請求通知客戶端進行更新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM