dubbo 多連接,多線程池.


1. consumer 多連接

Dubbo protocol options:

< dubbo:protocol name=“dubbo” port=“9090” server=“netty” client=“netty” codec=“dubbo” serialization=“hessian2” charset=“UTF-8” threadpool=“fixed” threads=“100” queues=“0” iothreads=“9” buffer=“8192” accepts=“1000” payload=“8388608” />

Dubbo協議缺省每服務每提供者每消費者使用單一長連接,如果數據量較大,可以使用多個連接。

< dubbo:protocol name = "dubbo" connections = "2" />

    phil注: 服務端配置大於客戶端配置,服務端如果配置2,那么所有的消費者和服務提供者在使用這個 service 都會獨立一個連接? 面試題.考察是否真的用過,還是只知道理念

  • <dubbo:service connections=”0”>或<dubbo:reference connections=”0”>表示該服務使用JVM共享長連接。(缺省)
  • <dubbo:service connections=”1”>或<dubbo:reference connections=”1”>表示該服務使用獨立長連接。
  • <dubbo:service connections=”2”>或<dubbo:reference connections=”2”>表示該服務使用獨立兩條長連接。可以繼續配置3,4,5.
為防止被大量連接撐掛,可在服務提供方限制大接收連接數,以實現服務提供方自我保護。
< dubbo:protocol name = "dubbo" accepts = "1000" />
 

2.多線程池

   dubbo 多線程池不是在一個端口下實現的. 而必須新增一個protocol .將多線程池轉成多 protocol 來實現.

< dubbo:protocol id = "dubbo1" name = "dubbo" port = "20880" />
< dubbo:protocol id = "dubbo2" name = "dubbo" port = "20881" />
然后 service 配置選擇具體的 protocal
<dubbo:service interface="PassengerService"
                   protocol=" dubbo2" version="1.0.0${user.env}" ref="passengerRemoteService"
                   timeout="3000" />

    <dubbo:service interface="com.ricky.dubbo.api.DemoService" ref="demoService" protocol="dubbo" />

phil 注: 當有兩個協議后,所有的 service 必須注明使用哪個 protocol.

3. 單 protocol 下真正的線程池隔離方法,多線程池. 分線程池
核心是改造了Dispatcher,並利用 java SPI擴展機制配置到 dubbo 的 protocol 配置中,替換默認的 dispatcher.
   dubbo分線程池處理同一服務請求隨記

[1] Dubbo 源代碼分析八:再說 Provider 線程池被 EXHAUSTED 線程池模型
[2] Dubbo高級篇_10_Dubbo線程模型
[3] 使用Hystrix對Dubbo消費者提供線程隔離保護

 

 

 


免責聲明!

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



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