Dubbo簡單入門

Dubbo 一點點見解

一 爲什麼需要 dubbo

很多時候,其實我們使用這個技術的時候,可能都是因爲項目需要,所以,我們就用了,但是,至於爲什麼我們需要用到這個技術,可能自身並不是很瞭解的,但是,其實瞭解技術的來由及背景知識,對於理解一項技術還是有幫助的,那麼,dubbo是怎麼被提上日程的呢?

在互聯網的發展過程中,在以前,我們只需要一個服務器,將程序全部打包好就可以,但是,隨着流量的增大,常規的垂直應用架構已無法應對,所以,架構就發生了演變。

1 單一應用架構

2 應用和數據庫單獨部署

3 應用和數據庫集羣部署

4 數據庫壓力變大,讀寫分離

5 使用緩存技術加快速度

6 數據庫分庫分表

7 應用分爲不同的類型拆分

發展到這個階段的時候,我們發現,應用與應用之間的關係已經十分的複雜了,就會出現以下幾個問題(以下摘錄於官網):

① 當服務越來越多時,服務 URL 配置管理變得非常困難,F5 硬件負載均衡器的單點壓力也越來越大。
② 當進一步發展,服務間依賴關係變得錯蹤複雜,甚至分不清哪個應用要在哪個應用之前啓動,架構師都不能完整的描述應用的架構關係。
③ 接着,服務的調用量越來越大,服務的容量問題就暴露出來,這個服務需要多少機器支撐?什麼時候該加機器?

爲了解決這由於架構的演變所產生的問題幾個問題,於是,dubbo 產生了。當然,解決這個問題的技術不止 dubbo 。
在這裏插入圖片描述

從上面 Dubbo 的服務治理圖我們就可以看到,Duboo 很好了解決了上面所出現的一些問題。

所以,當你的系統架構發展到了這種階段的時候,就需要考慮使用 Dubbo 了。

二 Dubbo 技術架構

我們已經非常清楚的知道爲什麼在我們的系統中需要 Dubbo 這項技術了,下面,我們接着嘮叨嘮叨 Dubbo 的架構。

在這裏插入圖片描述
看到圖之後,可能你對上面的幾個概念還是一臉懵逼,無從下手,下面,帶你看看這幾個角色到底是什麼意思?

節點角色說明

節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器
看了這幾個概念後似乎發現,其實 Dubbo 的架構也是很簡單的(其實現細節是複雜的),爲什麼這麼說呢,有沒有發現,其實很像生產者-消費者模型。只是在這種模型上,加上了註冊中心和監控中心,用於管理提供方提供的url,以及管理整個過程。

那麼,整個發佈-訂閱的過程就非常的簡單了。

啓動容器,加載,運行服務提供者。
服務提供者在啓動時,在註冊中心發佈註冊自己提供的服務。
服務消費者在啓動時,在註冊中心訂閱自己所需的服務。
如果考慮失敗或變更的情況,就需要考慮下面的過程。

註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者。
服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
通過這番講解,我相信 Dubbo 的架構我們也輕車熟路了,那就直接入手,開車吧。

三 Dubbo 開發

3.1 服務端

定義接口

public interface EmpDubboService {
    /**
     * 根據 用戶Id 獲取用戶接口
     * @param empId
     * @return
     */
    EmpInfoDto getByEmpId(Long empId);

}

接着,定義它的實現類。

@Service("empDubboService")
public class EmpDubboServiceImpl implements EmpDubboService {
   
    @Override
    public EmpInfoDto getByEmpId(Long empId) {
 
        return null;
    }
}

導入依賴

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ouyangsihai</groupId>
    <artifactId>dubbo-provider</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.10</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.5</version>
        </dependency>
        <dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.32.Final</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.8.0</version>
        </dependency>

    </dependencies>
</project>

另外,這裏我們使用 zookeeper 作爲註冊中心。

接着 服務暴露,在資源文件下創建dubbo.xml,添加如下配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

<!--
    <dubbo:provider threads="1000" payload="67108864" />
-->

    <!-- 定義監控中心 -->
<!--
    <dubbo:monitor address="mxDubbo://127.0.0.1:1122"/>
-->

    <!-- 提供方應用信息,用於計算依賴關係 -->
    <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" />

    <dubbo:service interface="com.meicloud.paas.muc.dubbo.organization.service.EmpDubboService"
                   ref="empDubboService">
</beans>

3.2消費端

在消費服務下資源文件創建消費文件dubbo-reference.xml,添加如下配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
      http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">


    <dubbo:reference id="empDubboService" interface="com.meicloud.paas.muc.dubbo.organization.service.EmpDubboService" retries="0"  timeout="30000" lazy="true"/>


</beans>

依賴服務通過方接口

<dependency>
            <groupId>com.meicloud.mp</groupId>
            <artifactId>mdm-dubbo-interface</artifactId>
        </dependency>

跟服務端一樣啓動即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章