Dubbo知識點梳理

Dubbo是阿里的一個產品。是一個分佈式、高性能、透明化RPC服務框架,提供服務自動註冊、自動發現等高效服務治理方案。
Dubbo是實現SOA架構時常用的服務之一,除了Dubbo外還有如下可供選擇
製作兼容JDK1.8的dubbo-admin

實現SOA架構時常用的服務

  1. Dubbo作爲服務
  2. WebService作爲服務(比較老了)
  3. Dubbox作爲服務(噹噹網開發的)
  4. 服務方就是web項目,調用web項目的控制器(HttpClient)

RPC(遠程過程調用協議)

客戶端通過互聯網調用遠程服務器,不知道遠程服務器的具體代碼實現,只知道遠程服務器提供了什麼功能。
優點:安全

Dubbo架構

首先來看一下架構圖
在這裏插入圖片描述

架構圖解析

  • 虛線都是異步訪問,實線都是同步訪問
  • 紫色虛線表示是在啓動時完成的
  • 綠色虛線(實線)都是程序運行過程中執行的功能
  • 所有的角色都可以在部署在單獨的服務器上,但是必須遵守特定的協議

節點說明

  • Provider
    服務提供者,發佈方
  • Consumer
    服務消費者,調用方
  • Container
    Dubbo容器,依賴於Spring容器
  • Registry
    註冊中心(當Container啓動時會把當前服務中所有可以提供的服務列表拿到Registry中進行註冊),主要作用就是告訴Consumer提供了什麼服務和服務方在哪裏,以及服務放放生變化後及時通知Consumer
  • Monitor
    監聽器,負責統計服務調用次數和調用時間等

除了Monitor之外,所有節點必不可少!

Dubbo支持的註冊中心
  1. Zookeeper
    1.1 優點:支持網絡集羣
    1.2 缺點:穩定性受限於Zookeeper
  2. Redis
    2.1 優點:性能高.
    2.2 缺點:對服務器環境要求較高.
  3. Multicast
    3.1 優點:面中心化,不需要額外安裝軟件.
    3.2 缺點:建議同機房(局域網)內使用
  4. Simple
    4.1 適用於測試環境.不支持集羣
Dubbo支持的協議
  1. Dubbo
    1.1 Dubbo官方推薦的協議.
    1.2 本質:使用NIO和線程池進行處理.
    1.3 缺點:大文件傳輸時可能出現文件傳輸失敗問題.
  2. RMI
    2.1 JDK提供的協議,遠程方法調用協議.
    2.2 缺點:偶爾連接失敗.
    2.3 優點:JDK原生,不需要進行額外配置(導入jar)
  3. Hession
    3.1 優點:基於http協議,http請求支持.
    3.2 缺點:需要額外導入jar,並在短連接時性能低

Dubbo開發步驟

配置Provider
引入dubbo依賴

注意去掉老版本spring的依賴,因爲在Dubbo2.x以前Spring所有的jar包是一個,之後依賴zookeeper客戶端工具zkClient

<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-webmvc</artifactId>
     <version>4.1.6.RELEASE</version>
 </dependency>
 <!-- 訪問zookeeper的客戶端jar -->
 <dependency>
     <groupId>com.101tec</groupId>
     <artifactId>zkclient</artifactId>
     <version>0.10</version>
 </dependency>
開發Provider常用的配置標籤

1.<dubbo:application/> :給provider起名
主要是爲了在monitor或管理工具中區別是哪個服務提供者【provider】

2.<dubbo:registry/> :配置註冊中心

  • address:註冊中心的ip和端口
  • protocol:使用哪種註冊中心

3.<dubbo:protocol/>:配置協議

  • name:使用什麼協議
  • port:consumer invoke provider時的端口號

4.<dubbo:service/> 註冊接口

  • ref:引用接口實現類<bean>的id值
<?xml version="1.0" encoding="UTF-8"?>
<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"
       xmlns="http://www.springframework.org/schema/beans"
       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">

    <!-- 給當前Provider自定義個名字 -->
    <dubbo:application name="dubbo-service"/>
    <!-- 配置註冊中心  -->
    <dubbo:registry address="192.168.154.128:2181" protocol="zookeeper"></dubbo:registry>
    <!-- 配置端口,注意此標籤表示,服務消費方和提供方連接採用dubbo協議 -->
    <!--消費方訪問提供方的請求端口是此配置的端口-->
    <dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>
    <!-- 註冊功能 -->
    <dubbo:service interface="com.chenfu.dubbo.service.DemoService" ref="demoServiceImpl"></dubbo:service>
    <bean id="demoServiceImpl" class="com.chenfu.dubbo.service.impl.DemoServiceImpl"></bean>

</beans>
啓動容器
  • 通過spring方式啓動
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();
System.out.println("啓動成功");
System.in.read();
  • 使用dubbo提供的方式啓動
    要求applicationContext-dubbo.xml必須放入類路徑下/META-INF/spring/*.xml
Main.main(args);
Dubbo的Consumer配置
引入依賴

在pom.xml中添加dubbo相關3個依賴(接口,dubbo.jar,zkClient)

配置Consumer時常用的標籤
 <!-- 給當前Provider自定義個名字 -->
 <dubbo:application name="dubbo-consumer"/>
 <!-- 配置註冊中心  -->
 <dubbo:registry address="192.168.154.128:2181" protocol="zookeeper"></dubbo:registry>
 <!-- 配置註解掃描 -->
 <dubbo:annotation package="com.chenfu.service.impl"/>
Admin管理界面

其本質是一個web項目,主要作用就是獲取註冊中心內Provider註冊的信息然後用頁面呈現出來。

使用指南
  • 把dubbo-admin-2.5.3.war上傳到服務器tomcat中。
  • 啓動tomcat完成後關閉tomcat,刪除上傳的dubbo-admin-2.5.3.war
  • 進入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行爲zookeeper的ip和端口
  • 修改管理界面的用戶名和密碼【第二行和第三行】
  • 啓動tomcat,在瀏覽器地址欄訪問tomcat中dubbo項目

注意:dubbo-admin-2.5.3.war和jdk1.7兼容,但是與jdk1.8不兼容。網上有很多解決方案。可以直接百度參考。

製作兼容JDK1.8的dubbo-admin

傳送門

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