dubbo學習

參考dubbo官方文檔
[http://dubbo.apache.org/books/dubbo-user-book/configuration[官方文檔]

1.本地dubbo環境的搭建

環境

    java1.8
    maven
    idea
    zookeeper
    dubbo

dubbo的搭建不需要依賴spring框架,
maven的依賴中加入 dubbo,zkClient, spring-context(主要用來加載配置文件)即可。
由於公司電腦是window環境,個人電腦是mac。同樣的項目在mac環境中跑不起來。
報如下的錯:

Caused by: java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy

dubbo的默認zookeeper的實現是用zkclient。這個錯誤好像是默認成curator
在 registry中指定 客戶端實現,問題解決

<dubbo:registry address="zookeeper://127.0.0.1:2181" client="zkclient"/>

2.覆蓋關係

  • 方法級優先,接口級次之,全局配置再次之。
  • 如果級別一樣,則消費方優先,提供方次之。

如:

    <dubbo:provider timeout="10000"/>
    <dubbo:application name="demo-provider"/>
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:service interface="com.tiany.DemoService" ref="demoService" timeout="5000">
       <dubbo:method name="sayHello" timeout="1000"/>
    </dubbo:service>
    <bean id="demoService" class="demo.DemoServiceImpl"/>

現在像timeout這個屬性,有全局的dubbo:provider, 有接口級別 dubbo:interface,有方法級別 dubbo:method
測試1:在DemoService的sayHello方法中Thread.sleep(1200);超過method的超時時間,小於接口的超市時間
結果:消費端會報超時異常
測試2:provider的sayHello方法中Thread.sleep(900), 客戶端配置方法級別的超時時間是800,如下:

    <dubbo:reference id="demoService" interface="com.tiany.DemoService" >
        <dubbo:method name="sayHello" timeout="800"/>
    </dubbo:reference>

結果:消費端會報超時異常

配置的覆蓋策略:
java -D > xml > properties

3.服務的註冊和發現

服務註冊的幾種方式:

  • multicast 註冊中心
  • zookeeper註冊中心
  • redis註冊中心
  • simple註冊中心

4.集羣容錯

轉自dubbo官網
幾種類型:

  • Failover
    失敗自動切換,當出現失敗,重試其它服務器。通常用於讀操作,但重試會帶來更長延遲。可通過 retries=”2” 來設置重試次數(不含第一次)
  • Failfast
    快速失敗,只發起一次調用,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄

如果我failover設置retries = 0 跟 failfast 有什麼區別?

  • Failsafe
    失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。
  • Failback
    失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於消息通知操作。
  • Forking
    並行調用多個服務器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks=”2” 來設置最大並行數。
  • Broadcast
    廣播調用所有提供者,逐個調用,任意一臺報錯則報錯 。通常用於通知所有提供者更新緩存或日誌等本地資源信息
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章