第二章:(3)Dubbo 常用配置之 超時&配置覆蓋關系


一、超時時間

由於網絡或服務端不可靠,會導致調用出現一種不確定的中間狀態(超時)。為了避免超時導致客戶端資源(線程)掛起耗盡,必須設置超時時間。

1、Dubbo 消費端

指定接口以及特定方法超時配置
<!--
    屬性覆蓋規則
    以 timeout 為例:
    1)精確優先 (方法級優先,接口級次之,全局配置再次之)
    2)消費者設置優先(如果級別一樣,則消費方優先,提供方次之)
-->
<dubbo:reference interface="com.njf.gmall.service.UserService"
                 id="userService" check="false" timeout="4000">
    <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:reference>

<!-- 配置當前消費者的統一規則,所有的服務都不檢查-->
全局超時配置
<dubbo:consumer check="false" timeout="5000"></dubbo:consumer>

2、Dubbo 服務端

全局超時配置
<dubbo:provider timeout="5000" />

指定接口以及特定方法超時配置
<dubbo:provider interface="com.foo.BarService" timeout="2000">
    <dubbo:method name="sayHello" timeout="3000" />
</dubbo:provider>

二、配置之間的關系

三、不同粒度配置的覆蓋關系

以 timeout 為例,下圖顯示了配置的查找順序,其它 retries, loadbalance, actives 等類似:

  • 方法級優先,接口級次之,全局配置再次之。
  • 如果級別一樣,則消費方優先,提供方次之。

其中,服務提供方配置,通過 URL 經由注冊中心傳遞給消費方。

配置的覆蓋規則:

  1. 方法級配置別優於接口級別,即小 Scope 優先
  2. Consumer 端配置 優於 Provider 配置 優於 全局配置,
  3. 最后是 Dubbo Hard Code 的配置值(見配置文檔)

dubbo 推薦在 Provider 上盡量多配置 Consumer 端屬性

1、作服務的提供者,比服務使用方更清楚服務性能參數,如調用的超時時間,合理的重試次數,等等

2、在 Provider 配置后,Consumer 不配置則會使用 Provider 的配置值,即 Provider 配置可以作為 Consumer 的缺省值。否則,Consumer 會使用 Consumer 端的全局設置,這對於 Provider 不可控的,並且往往是不合理的

(建議由服務提供方設置超時,因為一個方法需要執行多長時間,服務提供方更清楚,如果一個消費方同時引用多個服務,就不需要關心每個服務的超時設置)。

理論上 ReferenceConfig 中除了 interface 這一項,其他所有配置項都可以缺省不配置,框架會自動使用 ConsumerConfig,ServiceConfig, ProviderConfig 等提供的缺省配置。

1、2.1.0 開始支持,注意聲明:xmlns:p="http://www.springframework.org/schema/p"

2、引用缺省是延遲初始化的,只有引用被注入到其它 Bean,或被 getBean() 獲取,才會初始化。如果需要飢餓加載,即沒有人引用也立即生成動態代理,可以配置:<dubbo:reference ... init="true" />


免責聲明!

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



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