Dubbo(四)限流之客戶端設置connections參數


上一篇博文講到服務器端設置connections無效后,我再查詢了官方文檔,connections參數的定義為:“對每個提供者的最大連接數,rmi、http、hessian等短連接協議表示限制連接數,dubbo等長連接協表示建立的長連接個數”。我認為如果此參數並不是限制服務端的,那么這個參數很有可能是限制客戶端鏈接的。比方說connections=2時,每個客戶端只能創建兩條和服務器端的連接。那么我們就開始實驗吧:

完整代碼在 https://github.com/ralgond/dubbo-example/releases/tag/v0.0.4

修改dubbo-example-consumer的consumer.xml的dubbo:reference標簽成如下:

<dubbo:reference id="greetingService" interface="com.github.ralgond.de.sdk.GreetingService" group="dubbo" version="0.0.1"
    	timeout="30000" connections="2"/>

啟動dubbo-example-provider的com.github.ralgond.de.provider.ApiProvider2,為服務端。

啟動dubbo-example-consumer的com.github.ralgond.de.consumer.ApiConsumer2,為客戶端。

等待Console打印出“Hello world raglond”后在cmd執行:

netstat -aon | findstr "20880"  | findstr "23724" | find /c /v ""

上面這段命令是在計算客戶端到服務端的真實的連接數,得到的結果是28。需要注意的是其中的“23724”是客戶端的進程號,你應該輸入正確的進程號,而不是23724。

到這里,我們通過不斷調整connections的數值,發現一個規律:
當connections=1時,連接數為14
當connections=2時,連接數為28
當connections=3時,連接數為42
當connections=10時,連接數為140

可見連接數是connections數值的14倍,而並非我們設置的數值。

為什么會是14倍呢?主要原因是provider注冊自己到zookeeper時使用的是持久節點,因為我之前啟動了14次的provider,那么ZK里的節點/dubbo/{serviceName}/privoders下面就會14個子節點,它們都是只向相同的主機,比如192.168.0.105:20880。

客戶端啟動后會從zookeeper拉取出會得到14個地址,盡管url非常相似(只有pid和timestamp不同),但它依然將結果視為14個不同的provider,也因此它會創建14條連接到偵聽192.168.0.105:20880的provider(connections等於1時)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM