Dubbo與Netty雜談

在Dubbo的'人生'中, 無論它是在自己的'親爸爸'阿里家族成長, 還是'寄養(yǎng)'在Apache家族里, Dubbo的底層通信一直使用高性能的Netty框架.

Dubbo在阿里家族一直成長到v2.6.9版本之后,就被送到Apache家族了.
通過Maven官網(wǎng)搜索Dubbo版本, 如下

圖片.png
圖片.png

從上面兩張圖看出, Dubbo在阿里家族的Maven最高版本是v2.6.9, 在Apache家族的Maven最低版本是v2.7.0, 正好銜接.

在之前的Netty在Dubbo中使用了哪些Handler文章中, 介紹了在服務端或客戶端啟動之后, 流程的處理過程涉及哪些Handler. 下面提供一張更全面的圖

Netty在Dubbo中使用了哪些Handler.png

上面這張圖, 涉及了Dubbo使用Netty作為客戶端和服務端時啟動的主要核心代碼, 包括核心類, 以及心跳等內(nèi)容. 接下來逐一說下每個部分內(nèi)容.
圖中代碼的對應Dubbo版本是v2.6.9

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.9</version>
</dependency>

圖中內(nèi)容分成三個區(qū)域, 左邊和右邊分別對應啟動服務端和啟動客戶端時對應 的Netty代碼, 包括使用的Handler. 中間部分涉及客戶端和服務端的
HeaderExchangeServer和HeaderExchangeClient, 還有心跳相關.

在服務端啟動過程中, 會創(chuàng)建一個HeaderExchangeServer類,
它有一個NettyServer屬性, 還有一個ScheduledExecutorService屬性.
NettyServer就是負責監(jiān)聽客戶端連接以及讀寫IO操作(具體是由Netty相關的類實現(xiàn)的). 當有數(shù)據(jù)到達服務端的時候, 從圖上來看, 就會從上到下經(jīng)過每個Handler, 當需要向客戶端寫數(shù)據(jù)的時候, 就會從下到上經(jīng)過每個Handler.

ScheduledExecutorService類是一個定時任務相關的線程池. 當客戶端沒有向服務端發(fā)送請求的時候, 也就意味著沒有數(shù)據(jù)到達服務端了. 通過這個定時任務可以定時向客戶端發(fā)送心跳包, 正常情況, 客戶端收到服務端的心跳包之后, 會響應一個心跳包給服務端, 服務端接收到客戶端的響應心跳包之后, 什么業(yè)務也不會做. 不管是正常的業(yè)務數(shù)據(jù)發(fā)送和接收, 還是心跳包的發(fā)送和接收, 接收到包就會更新最后讀的時間, 發(fā)送包就會更新最后寫的時間. 根據(jù)最后讀或者寫的時間來判斷, 經(jīng)過了這么久還是沒有收到對端的響應包, 那么服務端最后就會斷開與客戶端的連接. 簡單說明就是, 服務端會根據(jù)最后一次讀/寫的時間判斷, 比如已經(jīng)過了1分鐘了, 客戶端還是沒有給服務端發(fā)送數(shù)據(jù), 那么服務端就會給客戶端發(fā)送心跳包, 發(fā)了幾次心跳包之后(至于發(fā)送幾次是根據(jù)時間大小判斷的)還是沒有收到客戶端的心跳包, 那么服務端就會斷開連接.

在客戶端啟動過程中, 會創(chuàng)建一個HeaderExchangeClient類, 它有一個NettyClient屬性, 還有一個ScheduledExecutorService屬性.NettyClient是負責讀寫IO操作(具體是由Netty相關的類實現(xiàn)的). 當有數(shù)據(jù)到達客戶端的時候, 從圖上來看, 就會從上到下經(jīng)過每個Handler, 當需要向服務端寫數(shù)據(jù)的時候, 就會從下到上經(jīng)過每個Handler.

在創(chuàng)建NettyClient的時候,會創(chuàng)建一個ScheduledThreadPoolExecutor. 這個線程池負責重連服務端, 它也是定時的檢查連接是否關閉, 如果關閉了那么就會重連服務端.

在v2.6.9版本, 即阿里家族的版本, 實現(xiàn)心跳檢測是通過客戶端和服務端互發(fā)心跳包的方式實現(xiàn)的, 更具體的說是通過JDK的線程池實現(xiàn)定時檢測的.

ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor();

而就在v2.7.0版本, 也就是Dubbo捐獻給Apache的第一個版本, 心跳檢測的實現(xiàn)使用的是時間輪(HashedWheelTimer)的方式. 只是實現(xiàn)的方式不同而已, 但是服務端依然會發(fā)送心跳包.

可是到了v2.7.3版本, 不僅僅增加了使用Netty的IdleStateHandler類進行空閑檢測, 雖然還使用了時間輪, 但是服務端已經(jīng)不再發(fā)送心跳包了, 服務端一旦發(fā)現(xiàn)連接空閑, 直接斷開連接了.

雜談結(jié)束...

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赃额,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌话原,老刑警劉巖坑雅,帶你破解...
    沈念sama閱讀 217,826評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡疗疟,警方通過查閱死者的電腦和手機程帕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評論 3 395
  • 文/潘曉璐 我一進店門住练,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人愁拭,你說我怎么就攤上這事讲逛。” “怎么了岭埠?”我有些...
    開封第一講書人閱讀 164,234評論 0 354
  • 文/不壞的土叔 我叫張陵盏混,是天一觀的道長。 經(jīng)常有香客問我惜论,道長许赃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評論 1 293
  • 正文 為了忘掉前任馆类,我火速辦了婚禮混聊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘乾巧。我一直安慰自己句喜,他們只是感情好僵闯,可當我...
    茶點故事閱讀 67,611評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著藤滥,像睡著了一般鳖粟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拙绊,一...
    開封第一講書人閱讀 51,482評論 1 302
  • 那天向图,我揣著相機與錄音,去河邊找鬼标沪。 笑死榄攀,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的金句。 我是一名探鬼主播檩赢,決...
    沈念sama閱讀 40,271評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼违寞!你這毒婦竟也來了贞瞒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評論 0 276
  • 序言:老撾萬榮一對情侶失蹤趁曼,失蹤者是張志新(化名)和其女友劉穎军浆,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挡闰,經(jīng)...
    沈念sama閱讀 45,608評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡乒融,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,814評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摄悯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赞季。...
    茶點故事閱讀 39,926評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奢驯,靈堂內(nèi)的尸體忽然破棺而出申钩,到底是詐尸還是另有隱情,我是刑警寧澤叨橱,帶...
    沈念sama閱讀 35,644評論 5 346
  • 正文 年R本政府宣布典蜕,位于F島的核電站,受9級特大地震影響罗洗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钢猛,卻給世界環(huán)境...
    茶點故事閱讀 41,249評論 3 329
  • 文/蒙蒙 一伙菜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧命迈,春花似錦贩绕、人聲如沸火的。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽馏鹤。三九已至,卻和暖如春娇哆,著一層夾襖步出監(jiān)牢的瞬間湃累,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評論 1 269
  • 我被黑心中介騙來泰國打工碍讨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留治力,地道東北人。 一個月前我還...
    沈念sama閱讀 48,063評論 3 370
  • 正文 我出身青樓勃黍,卻偏偏與公主長得像宵统,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子覆获,可洞房花燭夜當晚...
    茶點故事閱讀 44,871評論 2 354

推薦閱讀更多精彩內(nèi)容