柚子快報激活碼778899分享:dubbo長連接
柚子快報激活碼778899分享:dubbo長連接
1、Dubbo 是一種使用長連接的RPC框架。在Dubbo中,客戶端與服務(wù)端之間建立的是長連接,這意味著一旦連接建立,它會被保持活躍狀態(tài)以供多次請求和響應(yīng)使用,減少了頻繁建立和斷開連接的開銷,提升了通信效率。Dubbo還實現(xiàn)了連接池機(jī)制,以便更高效地復(fù)用這些長連接。
2、dubbo默認(rèn)是使用單一長連接,即消費者與每個服務(wù)提供者建立一個單一長連接,即如果有消費者soa-user1,soa-user2,提供者soa-account三臺,則每臺消費者user都會與3臺account建立一個連接,結(jié)果是每臺消費者user有3個長連接到分別到3臺提供者,每臺提供者account維持到soa-user1和soa-user2的2個長連接。
3、既然在dubbo中描述消費者和提供者之間采用的是單一長連接,那么如果消費者端是高并發(fā)多線程模型的web應(yīng)用,單一長連接如何解決多線程并發(fā)請求問題呢?
dubbo的Client、Channel、Handler都使用了裝飾器模式,真正工作的是傳入的對象,外層對象是對傳入的對象的工作進(jìn)行了一定的裝飾或增強(qiáng)。Client包裹著Channel(NettyChannel,這個NettyChannel中也包括傳入的Client的引用)和傳入的真正的Client,如NettyClient和MinaClient。這里以NettyClient為例,NettyClient中包裹著netty原生的channel,這個channel是長連接的那個channel,也是最終真正工作的那個。consumer端多線程的請求進(jìn)入Client后會先調(diào)用request方法,非阻塞地返回DefaultFuture對象,然后從future對象中獲取響應(yīng)結(jié)果,獲取結(jié)果的方式有兩種,一種是通過get方法阻塞獲取,還有一種是通過傳入回調(diào)方法,在響應(yīng)的時候進(jìn)行回調(diào)。DefaultFuture中維護(hù)著Map CHANNELS和Map FUTURES,這兩個static map都以requestId作為key,其中每個response中也維護(hù)著和它對應(yīng)的request相同的id,在響應(yīng)時是通過這個id來尋找client端返回的那個DefaultFuture然后進(jìn)行響應(yīng)信息的獲取。這個相當(dāng)于用DefaultFuture中的兩個靜態(tài)map維護(hù)著等待響應(yīng)的請求信息,然后一個長連接作為worker來處理(在handler中進(jìn)行),每有一個響應(yīng)過來,靜態(tài)map中對應(yīng)的kv被移除,get方法阻塞的部分被喚醒。這樣就完成了一個長連接,多個并發(fā)請求都能正常工作的效果。
4、Dubbo 缺省協(xié)議采用單一長連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及 服務(wù)消費者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況。 反之,Dubbo 缺省協(xié)議不適合傳送大數(shù)據(jù)量的服務(wù),比如傳文件,傳視頻等,除非請求量很 低。
dubbo源碼之單一長連接與客戶端多線程并發(fā)請求是如何協(xié)調(diào)的-騰訊云開發(fā)者社區(qū)-騰訊云 (tencent.com)
Dubbo協(xié)議異步單一長連接原理與優(yōu)勢-阿里云開發(fā)者社區(qū) (aliyun.com)
dubbo 長連接-騰訊云開發(fā)者社區(qū)-騰訊云 (tencent.com)
Dubbo并發(fā)控制和連接控制_dubbo最大并發(fā)數(shù)-CSDN博客
dubbo協(xié)議下的單一長連接與多線程并發(fā)如何協(xié)同工作-阿里云開發(fā)者社區(qū) (aliyun.com)
dubbo協(xié)議下的單一長連接與多線程并發(fā)如何協(xié)同工作_dubbo調(diào)用算一個連接嗎-CSDN博客
分布式系統(tǒng):dubbo的連接機(jī)制 - IntoTw - 博客園 (cnblogs.com)
柚子快報激活碼778899分享:dubbo長連接
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。