參考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.集羣容錯
幾種類型:
- Failover
失敗自動切換,當出現失敗,重試其它服務器。通常用於讀操作,但重試會帶來更長延遲。可通過 retries=”2” 來設置重試次數(不含第一次) - Failfast
快速失敗,只發起一次調用,失敗立即報錯。通常用於非冪等性的寫操作,比如新增記錄
如果我failover設置retries = 0 跟 failfast 有什麼區別?
- Failsafe
失敗安全,出現異常時,直接忽略。通常用於寫入審計日誌等操作。 - Failback
失敗自動恢復,後臺記錄失敗請求,定時重發。通常用於消息通知操作。 - Forking
並行調用多個服務器,只要一個成功即返回。通常用於實時性要求較高的讀操作,但需要浪費更多服務資源。可通過 forks=”2” 來設置最大並行數。 - Broadcast
廣播調用所有提供者,逐個調用,任意一臺報錯則報錯 。通常用於通知所有提供者更新緩存或日誌等本地資源信息