1. 程式人生 > >dubbo-常用配置

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&timestamp=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中所有的服務,只能通過 直連來訪問。