Dubbo入門

Dubbo是什麼?

Dubbo官網介紹Dubbo,Apache Dubbo™ 是一款高性能Java RPC框架。
在這裏插入圖片描述

RPC又是啥?

RPC就是Remote Procedure Call的簡稱,中文翻譯遠程過程調用,顧名思義遠程過程調用相對本地過程調用。說起RPC,就不能不說到分佈式----促使RPC誕生的領域。

假設有一個接口DemoService,以及它的實現類DemoServiceImpl,那麼在系統還是單體應用時,你要調用DemoService的方法來執行,直接new一個CalculatorImpl,然後調用對應方法就行了,其實就是非常普通的本地函數調用,因爲在同一個地址空間,或者說在同一塊內存,所以通過方法棧和參數棧就可以實現。現在,基於高性能和高可靠等因素的考慮,你決定將系統改造爲分佈式應用,將很多可以共享的功能都單獨拎出來,比如上面說到的DemoServiceImpl,你單獨把它放到一個服務裏頭,讓別的服務去調用它。
而RPC就是解決服務之間調用方案,RPC要能夠像本地調用一樣方便,讓調用者感知不到遠程調用的邏輯。
RPC是兩個服務器之間的調用這就涉及服務間的通信等問題,即我們在項目就要考慮RPC的高可用、複用性等問題,因此就有RPC框架的出現,而Dubbo就是一個高性能高可用的RPC框架。

Dubbo的架構

在這裏插入圖片描述

角色說明

節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器

調用關係

服務容器負責啓動,加載,運行服務提供者。
服務提供者在啓動時,向註冊中心註冊自己提供的服務。
服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

如何使用?

xml配置方式、multicast作爲註冊中心

項目結構
在這裏插入圖片描述
引入依賴

 <dependency>
 	<groupId>com.alibaba</groupId>
 	<artifactId>dubbo</artifactId>
 	<version>2.6.6</version>
</dependency>
<dependency>
	<groupId>io.netty</groupId>
 	<artifactId>netty-all</artifactId>
 	<version>4.1.32.Final</version>
</dependency>

服務提供者

定義接口

public interface DubboService {
    String sayHello(String name);
}

實現接口

public class DubboServiceImpl implements DubboService {
    @Override
    public String sayHello(String name) {
        return "hello " + name;
    }
}

暴露接口

    <!-- 使用multicast廣播註冊中心暴露服務地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234"/>
    <!-- 用dubbo協議在20880端口暴露服務 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    <!-- 聲明需要暴露的服務接口 -->
    <dubbo:service interface="com.liao.dubbo.DubboService" ref="demoService"/>
    <!-- 和本地bean一樣實現服務 -->
    <bean id="demoService" class="com.liao.dubbo.provider.DubboServiceImpl"/>

xml方式啓動

public class XmlProvider {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("provider.xml");
        context.start();
        System.in.read(); // 按任意鍵退出,等待消費者調用
    }
}

服務消費者

定義接口

public interface DubboService {
    String sayHello(String name);
}

配置註冊中心

    <!-- 使用multicast廣播註冊中心暴露發現服務地址 -->
    <dubbo:registry address="multicast://224.5.6.7:1234" />

    <!-- 生成遠程服務代理,可以和本地bean一樣使用demoService -->
    <dubbo:reference id="demoService" interface="com.liao.dubbo.DubboService" />

xml方式啓動

public class XmlConsumer {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        DubboService demoService = (DubboService) context.getBean("demoService"); // 獲取遠程服務代理
        String hello = demoService.sayHello("world"); // 執行遠程方法
        System.out.println(hello); // 顯示調用結果
        System.out.println();
        System.out.println(demoService);
        context.close();
    }
}

測試效果

首先啓動Provider等待調用,然後啓動Consumer查看調用結果,如與使用本地方法調用如出一轍。
在這裏插入圖片描述
此外Dubbo還提供了API註解等配置方式
註解方式:適用於spring應用,需要2.6.3及以上版本 ;API方式: (生產中很少使用),API方式使用範圍說明:API僅用於OpenAPI,ESB,Test,Mock等系統集成。
普通服務提供方或消費方,官方推薦採用XML配置方式使用Dubbo。

結尾

Dubbo作爲一款RPC框架,使用簡單、支持多種配置方式(API、Xml、註解),支持多種註冊中心(Multicast、Zookeeper、Redis、Simple), 使用場景(服務開發[rpc應用開發]服務軟負載均衡、服務依賴管理、服務監控、服務治理)。另外,學習資料齊全見官網文檔

發佈了7 篇原創文章 · 獲贊 0 · 訪問量 419
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章