1. 程式人生 > >Dubbo(配置篇):常用配置總結(配置檔案詳解)

Dubbo(配置篇):常用配置總結(配置檔案詳解)

1.暴露服務,定義服務資訊

服務配置,用於暴露一個服務,定義服務的元資訊,一個服務可以用多個協議暴露,一個服務也可以註冊到多個註冊中心。

<dubbo:service id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService"/>

2.引用服務配置
用於建立一個遠端服務代理,一個引用可以指向多個註冊中心。

<dubbo:reference id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService"/>

3.協議配置

用於配置提供服務的協議資訊,協議由提供方指定,消費方被動接受

#dubbo.protocol.name=dubbo
#dubbo.protocol.port=20102
<dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" />

4.應用配置

用於配置當前應用資訊,不管該應用是提供者還是消費者。

#dubbo.application.name=customer
#dubbo.application.owner=Soinice
#dubbo.application.organization=csdn.net
#dubbo.application.logger=slf4j
<dubbo:application name="${dubbo.application.name}" owner="${dubbo.application.owner}" 
organization="${dubbo.application.organization}" logger="${dubbo.application.logger}"/>

5.模組配置

用於配置當前模組資訊,可選。

<dubbo:module/> 

6.註冊中心配置

用於配置連線註冊中心相關資訊。

#dubbo.registry.address=zookeeper://192.168.1.163:2181
<dubbo:registry address="${dubbo.registry.address}" />

7.監控中心配置

用於配置連線監控中心相關資訊,可選。

<dubbo:monitor/>

8.提供方的預設值

當ProtocolConfig和ServiceConfig某屬性沒有配置時,採用此預設值,可選。

1)timeout:方法呼叫超時
2)retries:失敗重試次數,預設重試 2 次
3)loadbalance:負載均衡演算法,預設隨機
4)actives:消費者端,最大併發呼叫限制

#dubbo.service.loadbalance=roundrobin
#dubbo.service.retries=0
#dubbo.service.timeout=300000
<dubbo:provider loadbalance="${dubbo.service.loadbalance}"
retries="${dubbo.service.retries}" timeout="${dubbo.service.timeout}"/>

9.消費方預設配置

當ReferenceConfig某屬性沒有配置時,採用此預設值,可選。

可以配置一些 consumer 全域性。

<dubbo:consumer group="Soinice" timeout="30000" check="false"/>

10.方法配置

用於ServiceConfig和ReferenceConfig指定方法級的配置資訊。

<dubbo:method />

11.指定方法引數配置

<dubbo:argument />

12.服務呼叫超時設定

上圖中以timeout為例,顯示了配置的查詢順序,其它retries, loadbalance, actives也類似。
方法級優先,介面級次之,全域性配置再次之。
如果級別一樣,則消費方優先,提供方次之。

其中,服務提供方配置,通過URL經由註冊中心傳遞給消費方。
建議由服務提供方設定超時,因為一個方法需要執行多長時間,服務提供方更清楚,如果一個消費方同時引用多個服務,就不需要關心每個服務的超時設定。
理論上ReferenceConfig的非服務標識配置,在ConsumerConfig,ServiceConfig, ProviderConfig均可以預設配置。

13.啟動時檢查 
Dubbo預設會在啟動時檢查依賴的服務是否可用,不可用會丟擲異常,阻止Spring初始化完成。

如果你的Spring容器是懶載入的,或者通過API程式設計延遲引用服務,請關閉check,否則服務臨時不可用時,會丟擲異常,拿到null引用,如果check=false,總是會返回引用,當服務恢復時,能自動連上。

如果對有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動時,可以關閉啟動時檢查。預設為true,關閉方式如下:

1.關閉某個服務的啟動時檢查:(沒有提供者時報錯)
<dubbo:reference id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService" check="false"/>
2.關閉所有服務的啟動時檢查:(沒有提供者時報錯) 寫在定義服務消費者一方(全域性配置)
<dubbo:consumer check="false" />
3、關閉註冊中心啟動時檢查:(註冊訂閱失敗時報錯)
<dubbo:registry check="false" />

14.引用預設

引用預設是延遲初始化的,只有引用被注入到其它Bean,或者被getBean()獲取時,才會初始化。如果需要飢餓載入,即Dubbo啟動時就立即生成動態代理例項,則可以配置:

<dubbo:reference id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService" init="true" />

15.只訂閱不註冊

1、問題
為方便開發測試,經常會線上下共用一個所有服務可用的註冊中心,這時,如果一個正在開發中的服務提供者註冊,這樣註冊上去,其他消費者在呼叫該服務時,就會偶爾的呼叫到你本地的服務,這樣就報錯了,可能會影響消費者不能正常執行。

2、解決方案
可以讓服務提供者開發方,只訂閱服務(開發的服務可能依賴其它服務),而不註冊正在開發的服務,通過直連測試正在開發的服務。這樣別人就不會調你的本地服務,但你的本地服務所訂閱的服務正常執行

禁用註冊配置:
<dubbo:registry address="10.20.153.10:9090" register="false" />
或者:
<dubbo:registry address="10.20.153.10:9090?register=false" />

16.回聲測試(測試服務是否可用)

回聲測試用於檢測服務是否可用,回聲測試按照正常請求流程執行,能夠測試整個呼叫是否通暢,可用於監控。
所有服務自動實現EchoService介面,只需將任意服務引用強制轉型為EchoService,即可使用。

<dubbo:reference id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService" />
EchoService echoService = (EchoService) sendSmsSOAService; // 強制轉型為EchoService

17.延遲連線 

延遲連線,用於減少長連線數,當有呼叫發起時,再建立長連線。
只對使用長連線的dubbo協議生效。

<dubbo:protocol name="dubbo" lazy="true" />

18.令牌驗證 

防止消費者繞過註冊中心訪問提供者,在註冊中心控制權限,以決定要不要下發令牌給消費者,註冊中心可靈活改變授權方式,而不需修改或升級提供者。

1、全域性設定開啟令牌驗證:
<!--隨機token令牌,使用UUID生成-->
<dubbo:provider interface="com.sms.api.service.SendSmsSOAService" token="true" />
<!--固定token令牌,相當於密碼-->
<dubbo:provider interface="com.sms.api.service.SendSmsSOAService" token="123456" />

2、服務級別設定開啟令牌驗證:
<!--隨機token令牌,使用UUID生成-->
<dubbo:service interface="com.sms.api.service.SendSmsSOAService" token="true" />
<!--固定token令牌,相當於密碼-->
<dubbo:service interface="com.sms.api.service.SendSmsSOAService" token="123456" />

3、協議級別設定開啟令牌驗證:
<!--隨機token令牌,使用UUID生成-->
<dubbo:protocol name="dubbo" token="true" />
<!--固定token令牌,相當於密碼-->
<dubbo:protocol name="dubbo" token="123456" />

19.日誌適配

預設自動查詢:log4j、slf4j、jcl、jdk

可以通過以下方式配置日誌輸出策略:

<dubbo:application logger="log4j"/>

訪問日誌:
如果你想記錄每一次請求資訊,可開啟訪問日誌,類似於apache的訪問日誌。此日誌量比較大,請注意磁碟容量。

將訪問日誌輸出到當前應用的log4j日誌:

<dubbo:protocol accesslog="true" />

將訪問日誌輸出到指定檔案:

<dubbo:protocol accesslog="http://10.20.160.198/wiki/display/dubbo/sms/sendSms.log" />

20.配置Dubbo快取檔案

配置方法如下:

<dubbo:registry file="${user.home}/output/dubbo.cache" />

注意:

檔案的路徑,應用可以根據需要調整,保證這個檔案不會在釋出過程中被清除。如果有多個應用程序注意不要使用同一個檔案,避免內容被覆蓋。

這個檔案會快取:

註冊中心的列表

服務提供者列表

有了這項配置後,當應用重啟過程中,Dubbo註冊中心不可用時則應用會從這個快取檔案讀取服務提供者列表的資訊,進一步保證應用可靠性。

21.直連提供者

開發測試環境下,需要繞過註冊中心,直接測試服務提供者

<dubbo:reference id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService"
check="false" url="dubbo://192.168.1.1:20881"/> 

SendSmsSOAService里加個斷點,每次訪問都會走斷點。在管控臺本地服務介面最後點選禁用,還是可以正常訪問,說明繞過了註冊中心。

22.服務分組

可實現服務的穩步升級,當然 也可以 每個開發每個組,消費者就只會呼叫同一分組的服務介面了,這樣不會互相呼叫。

#consumer 全域性加 group
<dubbo:consumer group="Soinice" timeout="3000" check="false" />
#reference 引用 單一加 group
<dubbo:reference id="sendSmsSOAService" interface="com.sms.api.service.SendSmsSOAService" timeout="3000" check="false" group="Soinice"/>

也可以使用 version 來代替:

<dubbo:service id="sendMailSOAService"interface="com.sms.api.service.SendMailSOAService"
timeout="3000" check="false" version="0.0.1"/>
<dubbo:reference id="sendMailSOAService"interface="com.sms.api.service.SendMailSOAService" 
timeout="3000" check="false" version="0.0.1"/>