Dubbo示例目錄

啓動時檢查:

ubbo缺省會在啓動時檢查依賴的服務是否可用,不可用時會拋出異常,阻止Spring初始化完成,以便上線時,能及早發現問題,默認check=true。若是check=false,老是會返回引用,當服務恢復時,能自動連上。數據庫

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E5%90%AF%E5%8A%A8%E6%97%B6%E6%A3%80%E6%9F%A5服務器

集羣容錯:

在集羣調用失敗時,Dubbo提供了多種容錯方案,缺省爲failover重試。經過配置 retries="2"(注意,這個2不包含第一次錯誤的計數) 能夠達到3次錯誤就不在重試多線程

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E9%9B%86%E7%BE%A4%E5%AE%B9%E9%94%99併發

負載均衡

在集羣負載均衡時,Dubbo提供了多種均衡策略,缺省爲random隨機調用。app

關鍵配置項:loadbalance="roundrobin"負載均衡

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1dom

線程池模型

  • 若是事件處理的邏輯能迅速完成,而且不會發起新的IO請求,好比只是在內存中記個標識,則直接在IO線程上處理更快,由於減小了線程池調度。
  • 但若是事件處理邏輯較慢,或者須要發起新的IO請求,好比須要查詢數據庫,則必須派發到線程池,不然IO線程阻塞,將致使不能接收其它請求。

示例:異步

<dubbo:protocol name="dubbo" dispatcher="all" threadpool="fixed" threads="100" />

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E7%BA%BF%E7%A8%8B%E6%A8%A1%E5%9E%8Bide

直連提供者

在開發及測試環境下,常常須要繞過註冊中心,只測試指定服務提供者,這時候可能須要點對點直連,性能

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E7%9B%B4%E8%BF%9E%E6%8F%90%E4%BE%9B%E8%80%85

多協議

(1) 不一樣服務不一樣協議

不一樣的服務使用不一樣的協議傳輸,不一樣服務在性能上適用不一樣協議進行傳輸,好比大數據用短鏈接協議,小數據大併發用長鏈接協議。

(2) 多協議暴露服務

同一個服務使用多種協議,例如須要與http客戶端互操做

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E5%A4%9A%E5%8D%8F%E8%AE%AE

(3) 多註冊中心引用

服務消費者使用多個服務提供者的服務,

服務分組

當一個接口有多種實現時,能夠用group區分。

示例:

<dubbo:service group="feedback" interface="com.xxx.IndexService" />

<dubbo:service group="member" interface="com.xxx.IndexService" />
<dubbo:reference id="feedbackIndexService" group="feedback" interface="com.xxx.IndexService" />

<dubbo:reference id="memberIndexService" group="member" interface="com.xxx.IndexService" />

 多版本

當一個接口實現,出現不兼容升級時,能夠用版本號過渡,版本號不一樣的服務相互間不引用。

參數校驗

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E5%8F%82%E6%95%B0%E9%AA%8C%E8%AF%81

回聲測試

回聲測試用於檢測服務是否可用,回聲測試按照正常請求流程執行,可以測試整個調用是否通暢,可用於監控。

MemberService memberService = ctx.getBean("memberService"); // 遠程服務引用
 
EchoService echoService = (EchoService) memberService; // 強制轉型爲EchoService
 
String status = echoService.$echo("OK"); // 回聲測試可用性
 
assert(status.equals("OK"))

上下文信息

上下文中存放的是當前調用過程當中所需的環境信息。

(1) 服務消費方

xxxService.xxx(); // 遠程調用
boolean isConsumerSide = RpcContext.getContext().isConsumerSide(); // 本端是否爲消費端,這裏會返回true
String serverIP = RpcContext.getContext().getRemoteHost(); // 獲取最後一次調用的提供方IP地址
String application = RpcContext.getContext().getUrl().getParameter("application"); // 獲取當前服務配置信息,全部配置信息都將轉換爲URL的參數
// ...
yyyService.yyy(); // 注意:每發起RPC調用,上下文狀態會變化
// ...

(2) 服務提供方

public class XxxServiceImpl implements XxxService {
 
    public void xxx() { // 服務方法實現
        boolean isProviderSide = RpcContext.getContext().isProviderSide(); // 本端是否爲提供端,這裏會返回true
        String clientIP = RpcContext.getContext().getRemoteHost(); // 獲取調用方IP地址
        String application = RpcContext.getContext().getUrl().getParameter("application"); // 獲取當前服務配置信息,全部配置信息都將轉換爲URL的參數
        // ...
        yyyService.yyy(); // 注意:每發起RPC調用,上下文狀態會變化
        boolean isProviderSide = RpcContext.getContext().isProviderSide(); // 此時本端變成消費端,這裏會返回false
        // ...
    }
 
}

RpcContext是一個ThreadLocal的臨時狀態記錄器,當接收到RPC請求,或發起RPC請求時,RpcContext的狀態都會變化。
好比:A調B,B再調C,則B機器上,在B調C以前,RpcContext記錄的是A調B的信息,在B調C以後,RpcContext記錄的是B調C的信息。

異步調用

基於NIO的非阻塞實現並行調用,客戶端不須要啓動多線程便可完成並行調用多個遠程服務,相對多線程開銷較小。

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E5%BC%82%E6%AD%A5%E8%B0%83%E7%94%A8

參數回調

參數回調方式與調用本地callback或listener相同,只須要在Spring的配置文件中聲明哪一個參數是callback類型便可,Dubbo將基於長鏈接生成反向代理,這樣就能夠從服務器端調用客戶端邏輯。

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E5%8F%82%E6%95%B0%E5%9B%9E%E8%B0%83

事件通知

在調用以前,調用以後,出現異常時,會觸發oninvoke, onreturn, onthrow三個事件,能夠配置當事件發生時,通知哪一個類的哪一個方法。

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E4%BA%8B%E4%BB%B6%E9%80%9A%E7%9F%A5

併發控制和鏈接控制

限制服務消費者調用服務提供者的併發數和鏈接數

http://dubbo.io/User+Guide-zh.htm#UserGuide-zh-%E5%B9%B6%E5%8F%91%E6%8E%A7%E5%88%B6

相關文章
相關標籤/搜索