天天看點

Dubbo Monitor 實作原理?

Consumer 端在發起調用之前會先走 filter 鍊;provider 端在接收到請求時也是 

先走 filter 鍊,然後才進行真正的業務邏輯處理。

預設情況下,在 consumer 和 provider 的 filter 鍊中都會有 Monitorfilter。

1、MonitorFilter 向 DubboMonitor 發送資料 

2、DubboMonitor 将資料進行聚合後(預設聚合 1min 中的統計資料)暫存到 

ConcurrentMap<Statistics, AtomicReference> statisticsMap,然後使用一個 

含有 3 個線程(線程名字:DubboMonitorSendTimer)的線程池每隔 1min 鐘,

調用 SimpleMonitorService 周遊發送 statisticsMap 中的統計資料,每發送完畢 

一個,就重置目前的 Statistics 的 AtomicReference

3、SimpleMonitorService 将這些聚合資料塞入 BlockingQueue queue 中(隊 

列大寫為 100000)4、SimpleMonitorService 使用一個背景線程(線程名為:

DubboMonitorAsyncWriteLogThread)将 queue 中的資料寫入檔案(該線程以 

死循環的形式來寫)

5、SimpleMonitorService 還會使用一個含有 1 個線程(線程名字:

DubboMonitorTimer)的線程池每隔 5min 鐘,将檔案中的統計資料畫成圖表 

Java Program!