dubbo-常用配置
一、啟動時檢查
官網說明:
Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,預設 check="true"
。
可以通過 check="false"
關閉檢查,比如,測試時,有些服務不關心,或者出現了迴圈依賴,必須有一方先啟動。
另外,如果你的 Spring 容器是懶載入的,或者通過 API 程式設計延遲引用服務,請關閉 check,否則服務臨時不可用時,會丟擲異常,拿到 null 引用,如果 check="false"
,總是會返回引用,當服務恢復時,能自動連上。
在消費者一方的 dubbo-consumer.xml 配置裡:
<!--生成遠端服務代理,可以和本地bean一樣使用demoService ***** 啟動時檢查: check="true",Dubbo 預設會在啟動時檢查依賴的服務是否可用,不可用時會丟擲異常,阻止 Spring 初始化完成,以便上線時,能及早發現問題,預設 check="true" --> <dubbo:reference id="userFacade" interface="com.lhy.service.user.UserFacade" check="true" />
只啟動消費者,不啟動生產者
會報如下的錯:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userController':
Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private com.lhy.service.user.UserFacade com.lhy.consumer.controller.UserController.userFacade;
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userFacade':
FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException:
Failed to check the status of the service com.lhy.service.user.UserFacade.
No provider available for the service com.lhy.service.user.UserFacade
from the url zookeeper://192.168.85.3:2181/com.alibaba.dubbo.registry.RegistryService?application=lhy-consumer&check=true&dubbo=2.5.4&interface=com.lhy.service.user.UserFacade&methods=getById,getUsers,addUser&pid=13664&revision=1.0&side=consumer×tamp=1541645721420 to the consumer 192.168.0.105 use dubbo version 2.5.4
設定 check="fase" 則可以正常啟動消費者,在呼叫該服務的時候,則會報錯
二、叢集容錯
當服務提供者部署到多個機器的時候,此時可以配置叢集容錯,一般配置為Failover (預設配置) 或者Failfast 即可。可以配置到提供者上,也可以配置到消費者上
<!-- 宣告需要暴露的服務介面 ,寫操作可設定retries="0"避免重複呼叫SOA服務 叢集容錯: cluster="failover":失敗自動切換,當出現失敗,重試其它伺服器 [1]。通常用於讀操作,但重試會帶來更長延遲。可通過 retries="2" 來設定重試次數(不含第一次)。 cluster="failfast" :快速失敗,只發起一次呼叫,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。 cluster="failsafe" :失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。 cluster="failback":失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於訊息通知操作。 cluster="forking":廣播呼叫所有提供者,逐個呼叫,任意一臺報錯則報錯 。通常用於通知所有提供者更新快取或日誌等本地資源資訊。 一般配置為failover,重試0次/或者failfast --> <dubbo:service retries="0" interface="com.lhy.service.user.UserFacade" ref="userFacade" cluster="failover"/>
三、負載均衡
dubbo的負載均衡可以通過xml配置,也可以在dubbo-admin管控臺動態配置。一般使用管控臺配置,更加靈活。
一般配置為隨機模式
管控臺配置負載均衡,可以對每個服務的每個方法設定負載均衡策略。(但是管控臺的策略 沒有一致性hash)
xml配置,可以配在提供者,也可以配置在消費者:
<dubbo:service"interface="...""loadbalance="roundrobin""/> 或者 <dubbo:reference"interface="...""loadbalance="roundrobin""/>
四、直連提供者
在開發及測試環境下,經常需要繞過註冊中心,只測試指定服務提供者,這時候可能需要點對點直連,點對點直連方式,將以服務介面為單位,忽略註冊中心的提供者列表,A 介面配置點對點,不影響 B 介面從註冊中心獲取列表。
通過 XML 配置(消費者)
<dubbo:reference id="accountFacade" interface="com.lhy.service.user.AccountFacade" url="dubbo://localhost:20880" />
五、只訂閱
官方解釋:為方便開發測試,經常會線上下共用一個所有服務可用的註冊中心,這時,如果一個正在開發中的服務提供者註冊,可能會影響消費者不能正常執行。
可以讓服務提供者開發方,只訂閱服務(開發的服務可能依賴其它服務),而不註冊正在開發的服務,通過直連測試正在開發的服務。
只訂閱 provider.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <!--提供方應用資訊,使用者計算依賴關係--> <dubbo:application name="lhy-service"/> <!--使用zookeeper註冊中心暴露服務地址--> <!--只訂閱,不註冊: register="false" 開發階段,只訂閱zk中已有的服務(開發中的服務可能用到),而不向zk註冊服務,配合直連使用,此時消費者通過直連來呼叫 --> <dubbo:registry address="zookeeper://192.168.85.3:2181?backup=192.168.85.4:2181,192.168.85.5:2181" register="false"/> <!--<dubbo:registry"protocol="zookeeper""address="10.20.153.10:2181,10.20.153.11:2181,10.20.153.12:2181""/>--> <!-- 用dubbo協議在20880埠暴露服務 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 宣告需要暴露的服務介面 ,寫操作可設定retries="0"避免重複呼叫SOA服務 叢集容錯: cluster="failover":失敗自動切換,當出現失敗,重試其它伺服器 [1]。通常用於讀操作,但重試會帶來更長延遲。可通過 retries="2" 來設定重試次數(不含第一次)。 cluster="failfast" :快速失敗,只發起一次呼叫,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄。 cluster="failsafe" :失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。 cluster="failback":失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於訊息通知操作。 cluster="forking":廣播呼叫所有提供者,逐個呼叫,任意一臺報錯則報錯 。通常用於通知所有提供者更新快取或日誌等本地資源資訊。 一般配置為failover,重試0次/或者failfast --> <dubbo:service retries="0" interface="com.lhy.service.user.UserFacade" ref="userFacade" cluster="failover"/> <dubbo:service retries="0" interface="com.lhy.service.user.ProductFacade" ref="productFacade" cluster="failover"/> <dubbo:service retries="0" interface="com.lhy.service.user.AccountFacade" ref="accountFacade" cluster="failover"/> </beans>
消費者一方,consumer.xml ,通過直連來訪問:
<dubbo:reference id="accountFacade" interface="com.lhy.service.user.AccountFacade" url="dubbo://localhost:20880" />
說白了就是,開發測試階段,不讓服務提供方往註冊中心註冊,但是能從註冊中心訂閱已有的服務(如果正開發的服務依賴某個服務的話,可以呼叫)。如果配置了只訂閱,那麼本 provider中所有的服務,只能通過 直連來訪問。