Netty第二章 2020 7-4——Netty在Dubbo中的应用(3)关于单一长连接
dubbo中單一長連接的理解和常見誤區(qū)
1.低版本dubbo
dubbo默認(rèn)是單一長連接,那么這個(gè)默認(rèn)在哪里,長連接又是什么意思,單一長連接又是什么意思呢?
首先dubbo底層用的是netty,所以長連接說的也是通過netty創(chuàng)建的連接,本文主要說的是dubbo中單一長連接的概念和理解,關(guān)于netty不做更多展開。
話不多說,直接上源碼:
DubboProtocol在refer的時(shí)候,也就是consumer端啟動(dòng)去發(fā)現(xiàn)服務(wù)的時(shí)候,會(huì)調(diào)用getClients方法
該方法會(huì)檢查xml中配置的一個(gè)叫做connections的參數(shù),如果用戶沒有配置,那么缺省配置就是0,0代表共享連接,會(huì)調(diào)用getSharedClient這個(gè)方法而不是initClient方法。getSharedClient方法中會(huì)從一個(gè)叫做referenceClientMap的連接緩存中,該緩存的key是ip+端口,value就是client,所以就做到了ip+端口唯一對(duì)應(yīng)一個(gè)client,這就是單一長連接的概念——consumer端所有的dubbo服務(wù),無論有多少個(gè)service,都共享這一個(gè)連接。
如果對(duì)于service A,connections不是0(connections是配置在service上的),用戶自己配置了一個(gè)非零的值N,那么就不會(huì)走getSharedClient,而是走initClient,產(chǎn)生的效果就是consumer端的service A(refer A的時(shí)候),會(huì)初始化N個(gè)client。同時(shí),對(duì)于service B,connections配置了M,那么refer B的時(shí)候,會(huì)初始化M個(gè)client。
總結(jié)一下,connections無非就是0,1和N三種配置情況,為了容易理解:
- 0就可以記成全局配置,所有配置了0的service,每次調(diào)用都復(fù)用同一個(gè)長連接
- 1可以理解為單個(gè)service的配置,配置1的service,對(duì)于該service的每次調(diào)用都使用同一個(gè)長連接
- N也是單個(gè)service的配置,配置N的service,對(duì)于該service的每次調(diào)用都從這N個(gè)長連接中選一個(gè)(按照路由規(guī)則)
其實(shí)大部分文章中都描述為0和非0兩種情況,這里寫出三種情況,其實(shí)后兩種的1和N都是非0情況,單列出1是為了方便理解,因?yàn)橛行┩瑢W(xué)誤解單一長連接的時(shí)候其實(shí)誤解的就是1這種情況,配置了1的service其實(shí)在發(fā)起對(duì)該service調(diào)用的時(shí)候也是單一長連接,可以叫做服務(wù)級(jí)別單一長連接,但是和配置了0的全局單一長連接還是不一樣的。
其實(shí)上面這個(gè)實(shí)現(xiàn)里還有個(gè)問題,從上面提到的connections的三種賦值方式,仔細(xì)想想我們可以看出,如果我想要全局配置,但同時(shí)這個(gè)全局共享的連接數(shù)不唯一,該怎么配置呢?是做不到的,因?yàn)槿帜J(rèn)代碼里寫死了是1,而非1的寫法只能用來配置單service的共享連接數(shù)。不過新版dubbo對(duì)于這一點(diǎn)做了一些改動(dòng),讓我們這個(gè)夢(mèng)想得以實(shí)現(xiàn),詳情見下文。
2.社區(qū)dubbo 2.7.x
新版dubbo獲取連接依然調(diào)用了DubboProtocol的getClients方法,直接上代碼:
這里除了使用connections之外,同時(shí)還搭配了另外一個(gè)配置shareconnections,如果這個(gè)也不配置,那么就和舊版本一樣,都是1,即1個(gè)連接。如果配置了具體值,那么就可以實(shí)現(xiàn)上面說的,全局所有service共享長連接,但是不是單一長連接,而是N個(gè)長連接。
總結(jié)
以上是生活随笔為你收集整理的Netty第二章 2020 7-4——Netty在Dubbo中的应用(3)关于单一长连接的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 视频剪辑一定要知道这6个免费视频素材库
- 下一篇: win10系统修改电脑 hosts 地址