Dubbo源碼閱讀之 服務端和客戶端處理鏈

【 DubboProtocolTest.java ====>> 服務器 ===>> 處理器職責鏈】
1. 職責鏈:NettyHandler --> NettyServer --> MultiMessageHandler --> HeartbeatHandler 
                --> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler 
                --> requestHandler=new ExchangeHandlerAdapter
2. 處理器:NettyHandler
                        ======>>> 維護客戶端與服務端建立連接的 channel,通過ConcurrentMap來做到的。
3. 處理器:NettyServer
                        ======>>> 啥事都沒有做,直接傳遞給下一個消息處理器。
4. 處理器:MultiMessageHandler
                        ======>>> 在接受消息的方法中,判斷了當前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。
5. 處理器:HeartbeatHandler
                        ======>>> 更新當前處理器的讀寫的時間戳。
                        ======>>> 在接受消息的方法中,判斷當前消息是否是心跳消息,如果是心跳請求,就查看當前消息是否要響應,如果需要響應就發送一個心跳響應。
6. 處理器:AllChannelHandler
                        ======>>> 啓動一個Task,提交到一個無界的線程池。
7. 處理器:DecoderHandler
                        ======>>> 判斷該消息是否實現了接口Decodeable,如果實現了就調用方法 decode()。
8. 處理器:HeaderExChangeHandler
                        ======>>> receive方法中會調用發送方法,給客戶端返回結果值。
9. 處理器:requestHandler
                        ======>>> 接收消息,判斷消息是否是 Invocation。
                        ======>>> 根據Key獲取的Invoker,就是目標實例/方法。

                        ======>>> 調用目標方法。



【 DubboProtocolTest.java ====>> 客戶端器 ===>> 處理器職責鏈】
1. 職責鏈:NettyHandler --> NettyClient --> MultiMessageHandler --> HeartbeatHandler 
                --> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler 
                --> requestHandler=new ExchangeHandlerAdapter
2. 處理器:NettyHandler
                        ======>>> 維護客戶端與服務端建立連接的 channel,通過ConcurrentMap來做到的。
3. 處理器:NettyServer
                        ======>>> 啥事都沒有做,直接傳遞給下一個消息處理器。
4. 處理器:MultiMessageHandler
                        ======>>> 在接受消息的方法中,判斷了當前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。
5. 處理器:HeartbeatHandler
                        ======>>> 更新當前處理器的讀寫的時間戳。
                        ======>>> 在接受消息的方法中,判斷當前消息是否是心跳消息,如果是心跳請求,就查看當前消息是否要響應,如果需要響應就發送一個心跳響應。
6. 處理器:AllChannelHandler
                        ======>>> 啓動一個Task,提交到一個無界的線程池。
7. 處理器:DecoderHandler
                        ======>>> 判斷該消息是否實現了接口Decodeable,如果實現了就調用方法 decode()。
8. 處理器:HeaderExChangeHandler
                        ======>>> receive方法中會調用發送方法,給服務器發送響應
9. 處理器:requestHandler
                        ======>>> 接收消息,判斷消息是否是 Invocation。
                        ======>>> 根據Key獲取的Invoker,就是目標實例/方法。
                        ======>>> 調用目標方法。

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