Dubbo+Zookeeper架構—高階篇23-Dubbo(直連提供者、只訂閱、只註冊)
目錄
直連提供者
在開發及測試環境下,經常需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連,
點對點直聯方式,將以服務介面為單位,忽略註冊中心的提供者列表,
A介面配置點對點,不影響B介面從註冊中心獲取列表。
(1) 如果是線上需求需要點對點,可在<dubbo:reference>中配置url指向提供者,將繞過註冊中心,多個地址用分號隔開,配置如下:(1.0.6及以上版本支援)
<dubbo:reference id="xxxService"interface="com.alibaba.xxx.XxxService"url="dubbo://localhost:20890"/>
(2) 在JVM啟動引數中加入-D引數對映服務地址,如:
(key為服務名,value為服務提供者url,此配置優先順序最高,1.0.15及以上版本支援)
java -Dcom.alibaba.xxx.XxxService=dubbo://localhost:20890
注意:為了避免複雜化線上環境,不要在線上使用這個功能,只應在測試階段使用。
(3) 如果服務比較多,也可以用檔案對映,如:
(用-Ddubbo.resolve.file指定對映檔案路徑,此配置優先順序高於<dubbo:reference>中的配置,1.0.15及以上版本支援)
(2.0以上版本自動載入${user.home}/dubbo-resolve.properties檔案,不需要配置)
java -Ddubbo.resolve.file=xxx.properties
然後在對映檔案xxx.properties中加入:
(key為服務名,value為服務提供者url)
com.alibaba.xxx.XxxService=dubbo://localhost:20890
注意
為了避免複雜化線上環境,不要在線上使用這個功能,只應在測試階段使用。
在生產環境使用情況是,服務消費端只消費指定Provider提供者的服務
注意點:
1、 直連提供者只需要在消費端設定
2、 ${user.home}指的是當前作業系統使用者目錄,如 Win7 系統 Administrator 的使用者目錄就是 C:\Users\Administrator
服務只訂閱
問題 為方便開發測試,經常會線上下共用一個所有服務可用的註冊中心,這時,如果一個正在開發中的服務提供者註冊,可能會影響消費者不能正常執行。 |
解決方案 可以讓服務提供者開發方,只訂閱服務(開發的服務可能依賴其它服務),而不註冊正在開發的服務,通過直連測試正在開發的服務。 |
禁用註冊配置:
<dubbo:registryaddress="10.20.153.10:9090"register="false"/>
或者:
<dubbo:registryaddress="10.20.153.10:9090?register=false"/>
只訂閱配置測試
注意點:
1、“只訂閱”指的是需要做開發除錯的服務提供者,只向註冊中心訂閱其所依賴的服務,但
不向註冊中心註冊其本身可以提供的服務。
2、“只訂閱”需要結合“直連提供者”配置來進行呼叫測試。(正在開發的本地服務只訂閱,本地消費端
直連正在開發的本地服務進行除錯)
服務只註冊
- 問題
如果有兩個映象環境,兩個註冊中心,有一個服務只在其中一個註冊中心有部署,另一個註冊中心還沒來得及部署,而兩個註冊中心的其它應用都需要依賴此服務,所以需要將服務同時註冊到兩個註冊中心,但卻不能讓此服務同時依賴兩個註冊中心的其它服務。
- 解決方案
可以讓服務提供者方,只註冊服務到另一註冊中心,而不從另一註冊中心訂閱服務。
禁用訂閱配置:
<dubbo:registry id="hzRegistry" address="10.20.153.10:9090" />
<dubbo:registry id="qdRegistry" address="10.20.141.150:9090" subscribe="false" />
或者:
<dubbo:registry id="hzRegistry" address="10.20.153.10:9090" />
<dubbo:registry id="qdRegistry" address="10.20.141.150:9090?subscribe=false" />