Dubbo簡(jiǎn)介

首先熟知兩個(gè)概念1.SOA;2.RPC;

SOA

1.英文名稱(Service Oriented Ambiguity)
2.中文名稱:面向服務(wù)架構(gòu)
2.1有一個(gè)專門提供服務(wù)單元.
2.2其他所有單元都調(diào)用這個(gè)服務(wù).
3.SOA定位:
3.1 如何設(shè)計(jì)項(xiàng)目,讓開發(fā)時(shí)更有效率.
3.2 SOA是一種思想
4.之前項(xiàng)目架構(gòu)設(shè)計(jì)
4.1 在公司項(xiàng)目不允許所有項(xiàng)目都訪問(wèn)數(shù)據(jù)庫(kù).
4.2 開發(fā)時(shí),數(shù)據(jù)庫(kù)訪問(wèn)層代碼可能出現(xiàn)冗余
5.使用SOA架構(gòu)
5.1 專門訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)(項(xiàng)目).
5.2 開發(fā)時(shí)可以實(shí)現(xiàn),數(shù)據(jù)訪問(wèn)控制和代碼復(fù)用.
6.實(shí)現(xiàn)SOA架構(gòu)時(shí),常用服務(wù).
6.1 Dubbo 做為服務(wù).
6.2 WebService 做為服務(wù).
6.3 Dubbox 做為服務(wù).
6.4 服務(wù)方就是web項(xiàng)目,調(diào)用web項(xiàng)目的控制器.
6.4.1 使用HttpClient可以調(diào)用其他項(xiàng)目的控制器.

RPC

1.英文名稱(Remote Procedure Call Protocol)
2.中文名稱:遠(yuǎn)程過(guò)程調(diào)用協(xié)議
3.RPC解析:客戶端(A)通過(guò)互聯(lián)網(wǎng)調(diào)用遠(yuǎn)程服務(wù)器,不知道遠(yuǎn)程服務(wù)器具體實(shí)現(xiàn),只知道遠(yuǎn)程服務(wù)器提供了什么功能.


image.png

4.RPC最大優(yōu)點(diǎn):
4.1 數(shù)據(jù)安全性.

dubbo簡(jiǎn)介

1.Dubbo簡(jiǎn)介:一個(gè)分布式、高性能、透明化的RPC服務(wù)框架;
2.作用:提供服務(wù)自動(dòng)注冊(cè)、自動(dòng)發(fā)現(xiàn)等高效服務(wù)治理方案.
3.Dubbo架構(gòu)圖


Dubbo架構(gòu)圖.png

3.1 Provider :提供者,服務(wù)發(fā)布方.
3.2 Consumer:消費(fèi)者, 調(diào)用服務(wù)方
3.3 Container:Dubbo容器.依賴于Spring容器.
3.4 Registry: 注冊(cè)中心.當(dāng)Container啟動(dòng)時(shí)把所有可以提供的服務(wù)列表上Registry中進(jìn)行注冊(cè).
3.4.1 作用:告訴Consumer提供了什么服務(wù)和服務(wù)方在哪里.
3.5 Monitor:監(jiān)聽器
3.6 虛線都是異步訪問(wèn),實(shí)線都是同步訪問(wèn)
3.7 藍(lán)色虛線:在啟動(dòng)時(shí)完成的功能
3.8 紅色虛線(實(shí)線)都是程序運(yùn)行過(guò)程中執(zhí)行的功能
3.9 所有的角色都是可以在單獨(dú)的服務(wù)器上.所以必須遵守特定的協(xié)議.
4.運(yùn)行原理:
4.0 啟動(dòng)容器,相當(dāng)于在啟動(dòng)Dubbo的Provider
4.1 啟動(dòng)后會(huì)去注冊(cè)中心進(jìn)行注冊(cè).注冊(cè)所有可以提供的服務(wù)列表
4.2 在Consumer啟動(dòng)后會(huì)去Registry中獲取服務(wù)列表和Provider的地址.進(jìn)行訂閱.
4.3 當(dāng)Provider有修改后,注冊(cè)中心會(huì)把消息推送給Consummer
4.3.1 使用了觀察者設(shè)計(jì)模式(又叫發(fā)布/訂閱設(shè)計(jì)模式)
4.4 根據(jù)獲取到的Provider地址,真實(shí)調(diào)用Provider中功能.
4.4.1 在Consumer方使用了代理設(shè)計(jì)模式.創(chuàng)建一個(gè)Provider方類的一個(gè)代理對(duì)象.通過(guò)代理對(duì)象獲取Provider中真實(shí)功能,起到保護(hù)Provider真實(shí)功能的作用.
4.5 Consumer和Provider每隔1分鐘向Monitor發(fā)送統(tǒng)計(jì)信息,統(tǒng)計(jì)信息包含,訪問(wèn)次數(shù),頻率等.

四. Dubbo支持的注冊(cè)中心

  1. Zookeeper
    1.1 優(yōu)點(diǎn):支持網(wǎng)絡(luò)集群
    1.2 缺點(diǎn):穩(wěn)定性受限于Zookeeper
  2. Redis
    2.1 優(yōu)點(diǎn):性能高.
    2.2 缺點(diǎn):對(duì)服務(wù)器環(huán)境要求較高.
  3. Multicast
    3.1 優(yōu)點(diǎn):面中心化,不需要額外安裝軟件.
    3.2 缺點(diǎn):建議同機(jī)房(局域網(wǎng))內(nèi)使用
    4.Simple
    4.1 適用于測(cè)試環(huán)境.不支持集群.

五. Zookeeper講解

  1. Zookeeper 分布式協(xié)調(diào)組件.
    1.1 本質(zhì)一個(gè)軟件.
    2.Zookeeper常用功能
    2.1 發(fā)布訂閱功能.把zookeeper當(dāng)作注冊(cè)中心原因.
    2.2 分布式/集群管理功能.
    3.使用java語(yǔ)言編寫的.
    詳情請(qǐng)點(diǎn)擊zookeeper簡(jiǎn)介

六. Dubbo支持的協(xié)議

  1. Dubbo
    1.1 Dubbo官方推薦的協(xié)議.
    1.2 本質(zhì):使用NIO和線程池進(jìn)行處理.
    1.3 缺點(diǎn):大文件傳輸時(shí)可能出現(xiàn)文件傳輸失敗問(wèn)題.
  2. RMI
    2.1 JDK提供的協(xié)議,遠(yuǎn)程方法調(diào)用協(xié)議.
    2.2 缺點(diǎn):偶爾連接失敗.
    2.3 優(yōu)點(diǎn):JDK原生,不需要進(jìn)行額外配置(導(dǎo)入jar)
  3. Hession
    3.1 優(yōu)點(diǎn):基于http協(xié)議,http請(qǐng)求支持.
    3.2 缺點(diǎn):需要額外導(dǎo)入jar,并在短連接時(shí)性能低

七. Dubbo中Provider搭建

  1. 新建Maven Project, 里面只有接口(dubbo-service)
    1.1 為什么這么做?
    RPC框架,不希望Consumer知道具體實(shí)現(xiàn).如果實(shí)現(xiàn)類和接口在同一個(gè)項(xiàng)目中,Consumer依賴這個(gè)項(xiàng)目時(shí),就會(huì)知道實(shí)現(xiàn)類具體實(shí)現(xiàn).
  2. 新建Maven Project, 寫接口的實(shí)現(xiàn)類(dubbo-service-impl)
  3. 在duboo-service-impl中配置pom.xml
    3.1 依賴接口
    3.2 依賴dubbo,去掉老版本spring
    3.3 依賴新版本spring
    3.4 依賴zookeeper客戶端工具zkClient
<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-webmvc</artifactId>
            <version>4.1.6.RELEASE</version>
        </dependency>
        <!-- 訪問(wèn)zookeeper的客戶端jar -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
    </dependencies>
  1. 新建實(shí)現(xiàn)類,并實(shí)現(xiàn)接口方法.

  2. 新建配置文件applicationContext-dubbo.xml,并配置
    5.1 <dubbo:application/> 給provider起名,在monitor或管理工具中區(qū)別是哪個(gè)provider
    5.2 <dubbo:registry/> 配置注冊(cè)中心
    5.2.1 address:注冊(cè)中心的ip和端口
    5.2.2 protocol使用哪種注冊(cè)中心
    5.3 <dubbo:protocol/> 配置協(xié)議
    5.3.1 name 使用什么協(xié)議
    5.3.2 port: consumer invoke provider時(shí)的端口號(hào)
    5.4 <dubbo:service/> 注冊(cè)接口
    5.4.1 ref 引用接口實(shí)現(xiàn)類<bean>的id值

<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">
    <!-- 給當(dāng)前Provider自定義個(gè)名字 -->
    <dubbo:application name="dubbo-service"/>
    <!-- 配置注冊(cè)中心  -->
    <dubbo:registry address="192.168.139.130:2181" protocol="zookeeper"></dubbo:registry>
    <!-- 配置端口 -->
    <dubbo:protocol name="dubbo" port="20888"></dubbo:protocol>
    <!-- 注冊(cè)功能 -->
    <dubbo:service interface="com.bjsxt.service.DemoService" ref="demoServiceImpl"></dubbo:service>
    <bean id="demoServiceImpl" class="com.bjsxt.service.impl.DemoServiceImpl"></bean>
</beans>
  1. 啟動(dòng)容器
    6.1 通過(guò)spring方式啟動(dòng)
    6.1.1 applicationContext-dubbo.xml位置沒(méi)有要求
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();
System.out.println("啟動(dòng)成功");
System.in.read();

6.2 使用dubbo提供的方式啟動(dòng)(推薦使用這種方式)
6.2.1 要求applicationContext-dubbo.xml必須放入類路徑下/META-INF/spring/*.xml

Main.main(args);

八. Admin管理界面

  1. 本質(zhì)就是一個(gè)web項(xiàng)目
  2. 獲取注冊(cè)中心內(nèi)Provider注冊(cè)的信息.用頁(yè)面呈現(xiàn)出來(lái).
  3. 實(shí)現(xiàn)步驟
    3.1 把dubbo-admin-2.5.3.war上傳到服務(wù)器tomcat中.
    3.2 啟動(dòng)tomcat完成后關(guān)閉tomcat,刪除上傳的dubbo-admin-2.5.3.war
    3.2.1 為什么要?jiǎng)h除:需要修改解壓后的文件夾,如果不刪除.war文件,下次重啟tomcat會(huì)還原成未修改狀態(tài)
    3.3 進(jìn)入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行為zookeeper的ip和端口
    3.3.2 第二行和第三行為管理界面的用戶名和密碼


    image.png

    3.4 啟動(dòng)tomcat, 在瀏覽器地址欄訪問(wèn)tomcat中dubbo項(xiàng)目

九.Consumer搭建過(guò)程

  1. 在pom.xml中除了ssm的依賴添加dubbo相關(guān)3個(gè)依賴(接口,dubbo.jar,zkClient)
  2. web.xml中修改<init-value>applicationContext-*.xml
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext-*.xml</param-value>
</context-param>
  1. spring配置文件命名為applicationContext-spring.xml,配置dubbo的配置文件applicationContext-dubbo.xml
<!-- 給當(dāng)前Consumer自定義個(gè)名字 -->
<dubbo:application name="dubbo-consumer"/>
<!-- 配置注冊(cè)中心  -->
<dubbo:registry address="192.168.139.130:2181" protocol="zookeeper"></dubbo:registry>
<!-- 配置注解掃描 -->
<dubbo:annotation package="com.bjsxt.service.impl"/>
  1. 不需要編寫mapper
  2. 除了ServiceImpl中引用Provider中接口對(duì)象改變,其他代碼都一樣.
@Service
public class TestServiceImpl implements TestService {
//  @Resource
//  private xxMapper xxxMapper;
    @Reference
    private DemoService demoService;

Demo地址

參考
比較spring cloud和dubbo,各自的優(yōu)缺點(diǎn)是什么
阿里P8架構(gòu)師談:Dubbo的詳細(xì)介紹、設(shè)計(jì)思路、以及4大適用場(chǎng)景
dubbo-簡(jiǎn)單介紹和demo樣例運(yùn)行
阿里P8架構(gòu)師談:Dubbo的詳細(xì)介紹、設(shè)計(jì)思路、以及4大適用場(chǎng)景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容