【Dubbo篇】--Dubbo框架的使用

LHBlog發表於2018-03-26

一、前述

Dubbo是一種提供高效能,透明化的RPC框架.是阿里開源的一個框架。

官網地址:http://dubbo.io/

二、架構

元件解釋:

Provider: 提供者.釋出服務的專案.
Registry: 註冊中心.所有提供者必須去註冊中心註冊自己所有能釋出的服務.
Consumer: 消費者.呼叫服務的專案.
Monitor: 監控中心.監控消費者和提供者呼叫服務的時間及次數.預設每1分鐘向監控中心生成一次統計資料.之間呼叫必須遵守Dubbo支援的協議.
Container:容器.Dubbo依賴於Spring容器.

執行順序:
0:由Spring容器啟動服務.
1 向註冊中心註冊服務.
2 消費者向註冊中心訂閱需要呼叫的服務.在註冊中心的服務列表中尋找需要呼叫的服務.獲取到提供者真實地址.
3 註冊中心通知消費提供者的真實地址.如果提供者的服務發生變化,註冊中心會自動推送資訊給消費者.
4 消費者呼叫提供者的服務.
5 在呼叫過程中向監控中心傳送資料,進行統計呼叫時間和呼叫次數.
6 虛線都是非同步請求,實線都是同步請求.

三、Dubbo支援的註冊中心

 

1.Zookeeper註冊中心
1.1 優點:支援叢集.
1.2 缺點:穩定性受Zookeeper影響.
2.Redis註冊中心
1.1 優點:基於伺服器雙寫模式.效能高.
1.2 缺點:要求伺服器時間必須一致.
3.Multicast註冊中心
3.1 免中心化的註冊中心,不需要額外安裝軟體.
3.2 不支援叢集.
4.Simple註冊中心
4.1 適用於測試環境的.

四、Dubbo支援的幾種協議


1. Dubbo
1.1 基於NIO的協議.效能比較高
1.2 缺點:在單一連線時,傳輸大檔案可能出錯.
2.RMI
2.1 RMI是JDK提供的.可以和原生RMI互用.
2.2 缺點:可能出現連線無效情況.
3.Hession
3.1 第三方的Hession.jar
3.2 缺點:短連線效能低.

五、Zookeeper簡介


1.分散式協調元件(就是一個軟體.)
2.好處:
2.1 高效性
2.2 可擴充套件性.
3.作用:
3.1 服務釋出和訂閱(註冊使用這個特性)
3.2 叢集管理功能(SolrCloud使用這個特性)
3.3 負載均衡
3.4 分散式鎖
4.使用java語言編寫.


六.使用Maven釋出服務的步驟


1.建立dubbo-service專案,只寫介面
2.建立dubbo-service-impl專案,需要依賴dubbo-service
3.在pom.xml配置,匯入dubbo.jar和zkClient.jar
3.1 <exclusions>不匯入哪個依賴包
3.2 spring-context:我們使用的spring版本
3.3 zkClient:連線Zookeeper的客戶端工具包
3.4 dubbo: dubbo框架的包

 

<dependencies>
        <dependency>
            <groupId>com.bjsxt</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

  4. 在resources下新建spring配置檔案
  <beans>可以在dubbo-master.zip\dubbo-master\ dubbo-admin\ src\main\resources\META-INF\spring裡面複製

 

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://code.alibabatech.com/schema/dubbo 
        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 在監控中心/admin管理介面中看是哪個專案 -->
    <dubbo:application name="dubbo-service-impl"/>
    <!-- 配置註冊中心 -->
    <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry>
    <!-- 配置協議 -->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
    <!-- 註解掃描 -->
    <dubbo:annotation package="com.bjsxt.service.impl"/>
</beans>

 

5.編寫服務實現類

5.1 @Service是Dubbo的註解

import com.alibaba.dubbo.config.annotation.Service;
import com.bjsxt.service.DemoService;

@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String test(String name) {
        return "傳遞過來的內容:"+name;
    }
}

七.使用Maven建立Consummer專案

 1.保證Consummer專案中服務方介面
1.1 需要知道服務方介面名稱及方法名
2.建立Maven projec,配置pom.xml
2.1 依賴的dubbo-service可以從svn上下載.

<dependencies>
        <dependency>
            <groupId>com.bjsxt</groupId>
            <artifactId>dubbo-service</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>

 3.編寫spirng配置檔案
3.1 application需要自定義名稱
3.2 掃描自己專案中ServiceImpl的@Reference註解

    <!-- 在監控中心/admin管理介面中看是哪個專案 -->
    <dubbo:application name="dubbo-consummer"/>
    <!-- 配置註冊中心 -->
    <dubbo:registry protocol="zookeeper" address="192.168.92.130:2181"></dubbo:registry>
    <!-- 配置協議 -->
    <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
    <!-- 註解掃描,掃描@Reference註解 -->
    <dubbo:annotation package="com.bjsxt.service.impl"/>

4.編寫Service實現類程式碼
4.1 @Service 把類交給Spring容器
4.2 @Reference給介面注入物件.物件資訊從註冊中心獲取.

import org.springframework.stereotype.Service;
import com.alibaba.dubbo.config.annotation.Reference;
import com.bjsxt.service.DemoService;
import com.bjsxt.service.MyService;

@Service
public class MyServiceImpl implements MyService {
    @Reference
    private DemoService demoService;
    @Override
    public void test() {
        String result = demoService.test("張三");
        System.out.println(result);
    }
}

5、編寫測試程式碼:

public class Test {
    @SuppressWarnings("resource")
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-consummer.xml");
        MyServiceImpl bean = ac.getBean("myServiceImpl", MyServiceImpl.class);
        bean.test();
    }
}

八.Admin管理介面
1.本質:web專案,war打包專案
2.直接把dubbo-admin-2.5.3放入到tomcat(linux/window都可以)中
3.啟動tomcat.
4.關閉tomcat.
5.刪除dubbo-admin-2.5.3.war
5.1 防止下次啟動tomcat後重新解壓,導致修改內容無效
6.進入解壓後資料夾dubbo-admin-2.5.3/WEB-INF/中修改dubbo.properties檔案
6.1 第一行為註冊中心地址
6.2 第二行是管理員使用者名稱和密碼
6.3 第三行是遊客的使用者名稱個和密碼

 

相關文章