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 鍾,將文件中的統計數據畫成圖表 。