1. 程式人生 > >Dubbo+Zookeeper架構—高階篇23-Dubbo(直連提供者、只訂閱、只註冊)

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" />