1. 程式人生 > >Dubbo學習筆記(一)—— 建立一個簡單的Dubbo入門專案演示HelloWorld

Dubbo學習筆記(一)—— 建立一個簡單的Dubbo入門專案演示HelloWorld

一、Dubbo簡介

1、dubbo是什麼?

▶ 一個分散式服務框架

▶ 一個RPC遠端服務呼叫方案

▶ 一個SOA服務治理方案

2、dubbo架構圖


3、節點說明

Provider:暴露服務的服務提供方

Consumer:呼叫遠端服務的服務消費方

Registry:發現並註冊服務的服務註冊中心

Monitor:統計服務呼叫次數和呼叫時間的監控中心

Container:服務的執行容器

4、呼叫流程說明

① 服務容器負責啟動、載入、執行服務提供方;

② 服務提供方在啟動時,向註冊中心註冊自己提供的服務;

③ 服務消費方在啟動時,向註冊中心訂閱自己所要消費的服務;

④ 註冊中心返回服務提供方的地址列表給服務消費方,如果有變更,註冊中心將基於長連線推送變更資料給服務消費方;

⑤ 服務消費方從服務提供方的地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫;

⑥ 服務消費方和提供方,在記憶體中統計呼叫次數和呼叫時間,定時第一分鐘傳送統計資料到監控中心。

二、啟動zookeeper作為dubbo的註冊中心

        zookeeper是一個分散式的服務框架,是樹型的目錄服務的資料儲存,能做到管理叢集資料,dubbo與zookeeper一起可以做到叢集部署,當服務提供方出現異常或斷電停機時,zookeeper註冊中心能自動刪除提供者資訊,當提供方重啟時,能自動恢復註冊資料,以及訂閱請求。

三、在Linux下部署dubbo的監控中心(方便檢視服務提供方和消費方的情況)

1、下載dubbo-admin的war包

        之前dubbo還沒有移交給apache時,在阿里巴巴的github上還可以找到dubbo-admin這個專案,我們只需要下載下來打成war包即可,但現在dubbo已經成為apache開源組織的一個頂級專案之一,在apache的github上不知道為什麼找不到dubbo-admin這個專案了,所以這裡推薦一個已經打包好的war包給大家下載,支援jdk8,下載地址:https://download.csdn.net/download/u010608720/9542675,如果沒有積分的話也可以去我的github上去下載:https://github.com/Alexshi5/dubbo-demo

2、將war包上傳到linux中然後部署到tomcat下面的webapps目錄中,然後啟動tomcat

[[email protected] ~]# cp dubbo-admin-2.8.4.war /usr/local/tomcat9/webapps/

3、zookeeper和tomcat都啟動後,在瀏覽器中訪問監控中心


如果無法訪問的,先檢查是不是linux的防火牆沒關,然後再依次檢查IP地址、埠號、專案名是否輸入錯誤,賬號密碼都是root,登陸之後的頁面如下圖所示:

四、建立dubbo專案

1、專案結構規劃(為了簡化demo,除了父專案打包方式為pom,其他三個子模組打包方式均為jar包,使用的maven原型為quickstart)

dubbo-parent:父專案

dubbo-api:存放所有公共介面的模組,服務提供方與服務消費方均依賴此模組

dubbo-provider:實現公共介面並提供服務的服務提供方所在模組

dubbo-consumer:消費服務的服務消費方所在的模組

2、建立父專案dubbo-parent,pom檔案內容如下

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <dubbo.version>2.5.8</dubbo.version>
        <zookeeper.version>3.4.6</zookeeper.version>
        <zkclient.version>0.1</zkclient.version>
    </properties>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>${zookeeper.version}</version>
                <type>pom</type>
            </dependency>

            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>${zkclient.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>

3、建立子模組dubbo-api,pom檔案如下:

    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <type>pom</type>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
        </dependency>

    </dependencies>

① 在dubbo-api的包中建立一個介面DemoService,內容如下:

package com.mengfei.api;

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

② 進入到dubbo-api的根目錄,將dubbo-api打包成jar包安裝到本地的maven倉庫

4、建立子模組dubbo-provider,在pom檔案中新增dubbo-api的依賴

    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

① 在dubbo-provider的包中建立一個實現類,實現DemoService介面

package com.mengfei.provider;

import com.mengfei.api.DemoService;

public class DemoServiceImpl implements DemoService {
    public String sayHello(String name) {
        return "Hello" + name;
    }
}

② 在src/main目錄下建立一個resources目錄,並在此目錄下建立一個dubbo-provider.xml檔案,內容如下:

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

    <!--提供服務的供應商名稱-->
    <dubbo:application name="dubbo-provider"></dubbo:application>
    <!--使用zookeeper服務中心註冊服務,要先啟動zookeeper
        register:false代表只訂閱,不註冊
        subscribe:false代表只註冊,不訂閱
        check:false代表註冊中心不存在時,不報錯
        address:配置zookeeper的ip和埠號,叢集用逗號隔開
    -->
    <dubbo:registry address="zookeeper://192.168.188.130:2181" subscribe="false" check="false"></dubbo:registry>
    <!--用dubbo協議在29999埠暴露服務-->
    <dubbo:protocol name="dubbo" port="29999"></dubbo:protocol>
    <!--要註冊的服務介面-->
    <dubbo:service interface="com.mengfei.api.DemoService" ref="demoService"></dubbo:service>
    <!--實現介面的實現類-->
    <bean id="demoService" class="com.mengfei.provider.DemoServiceImpl"></bean>
</beans>

③ 在dubbo-provider的包中建立一個測試類ProviderTest,用來載入spring的配置檔案,啟動服務提供方,內容如下:

package com.mengfei.provider;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ProviderTest {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:dubbo-provider.xml");
        context.start();
        System.out.println("服務已經啟動!");
        System.in.read();//在控制檯按任意鍵退出
    }
}

④ 啟動main方法就啟動了服務提供方,這時檢視dubbo-admin監控中心


5、建立子模組dubbo-consumer,在pom檔案中新增dubbo-api的依賴

<dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>dubbo-api</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

① 在src/main目錄下建立resources目錄,並在此目錄下建立dubbo-consumer.xml檔案,內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       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://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <dubbo:application name="dubbo-consumer"/>
    <!--向註冊中心訂閱服務,由zookeeper定時推送-->
    <dubbo:registry address="zookeeper://192.168.188.130:2181"/>
    <!--引用已經註冊的服務-->
    <dubbo:reference id="demoService" interface="com.mengfei.api.DemoService"/>
</beans>

② 在dubbo-consumer的包中建立測試類ConsumerTest,用於載入spring的配置檔案,啟動服務消費方

package com.mengfei.consumer;

import com.mengfei.api.DemoService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ConsumerTest {
    public static void main(String[] args) throws Exception {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:dubbo-consumer.xml");
        context.start();
        DemoService demoService = (DemoService) context.getBean("demoService");
        String hello = demoService.sayHello("World");
        System.out.println(hello);
        System.in.read();//在控制檯按任意鍵退出
    }
}

③ 啟動main方法就啟動了服務消費方,檢視dubbo-consumer監控中心如下:


④ 檢視控制檯輸出結果


演示結束!

參考:



相關推薦

Dubbo學習筆記—— 建立一個簡單Dubbo入門專案演示HelloWorld

一、Dubbo簡介1、dubbo是什麼?▶ 一個分散式服務框架▶ 一個RPC遠端服務呼叫方案▶ 一個SOA服務治理方案2、dubbo架構圖3、節點說明Provider:暴露服務的服務提供方Consumer:呼叫遠端服務的服務消費方Registry:發現並註冊服務的服務註冊中心

Hibernate學習筆記——建立一個簡單的Hibernate專案

首先來看看Hibernate開發的一個簡單流程: (1)準備開發環境,建立Hibernate專案。 (2)在資料庫中建立資料表。 (3)建立持久化類。 (4)設計對映檔案,使用Hibernate對映檔案將POJO物件對映到資料庫。 (5)建立Hibernate的配置檔

dubbo學習筆記

獲取 linu pan 概念 規範 href 面向 打包 mon 學習之前先說明一下其他概念方便了解dubbo RPC概念:   是指遠程過程調用,是一種進程間的通信方式。這是一種思想,而不是規範。   (允許程序調用遠程的過程或函數,並且讓程序員無論是調用本地還是遠程的函

java設計模式學習筆記--- 建立型模式

文章目錄 簡介 設計模式所遵循的幾個原則 一、工廠方法模式 簡單工廠模式 工廠方法模式 抽象工廠模式 工廠模式小結 單例模式 單例模式小結 建造者模式

Socket的應用——建立一個簡單的回顯客戶端/伺服器

在這篇文章中,我們將利用Python的Socket模組,編寫一個簡單的本地TCPC/S應用:建立Server和Client,在開始時Server等待Client的請求過程中,Server顯示出等待資訊,之後Client連線上Server併發送訊息,最後Server則要回顯出來自客戶端的所有輸出,併發

微信小程式學習筆記----微信小程式入門簡介,開發者工具基礎使用

到現在學習小程式已經不早了,但是無論什麼時候開始都不晚,只要學就OK。 看到所有小程式開發的教程全部都是以註冊賬號開始的,但是註冊賬號的過程無論是官方文件還是其他的經驗帖子都已經有一堆了,而且本身這個過程也並不具有什麼技術性,實在是很多收費的教程視訊用來前期拖時間的一種方式

QML學習筆記— 做一個簡單的待做事項列表

checked amp click done itl listview blank row idt 做一個簡單的QML待做事項列表,能夠動態添加和刪除和編輯數據 GitHub:八至 作者:狐貍家的魚 本文鏈接:QML學習筆記(五)— 做一個待做事項列表

XSS 跨站指令碼攻擊 學習筆記 概念與簡單XSS構造

XSS是個啥? ### XSS 跨站指令碼攻擊。通過HTML注入篡改網頁,插入惡意指令碼。 啥是XSS? 首先我們寫了一個PHP <?php $input = $_GET["id"]; echo "<div>".$input."&l

ios tableView那些事建立一個簡單的tableView

工作也有半年多了!幾乎每個專案中的會用到tableview這個神奇而好用的控制元件,在學習和工作中都會看別人的部落格!對我有很大的幫助,就如同站在巨人的肩膀上的感覺吧 哈哈!於是決定重新開始寫部

Tomcat學習筆記一個簡單的Web服務器

sub 調用 [] ont 拒絕 address 剖析 文件 getprop 內容為《深入剖析Tomcat》第一章重點,以及自己的總結,如有描述不清的,可查看原書。 一、HTTP協議: 1、定義:用於服務器與客戶端的通訊的協議,允許web服務器和瀏覽器通過互聯網進行發送和接

C++學習筆記——一個字符串分割和統計的工具TextUtils

發生 插入 exit 大小 按行讀取 位置 n) fstream ostream 第一講先從一個實例開始——我們需要完成一個遍歷文件並統計單詞出現次數的任務。分解功能:首先,按行讀取文件並舍棄可能的空行。其次,將每一行都按照空格劃分單詞。因為可能存在標點符號,我們還需要將標

VUE學習筆記—安裝vue-cli和建立專案

Github:https://github.com/sueRimn 1.cmd開啟控制檯進行建立專案 (1)全域性安裝腳手架 在命令列輸入:npm install vue-cli -g (2)初始化專案 繼續輸入:vue init webpack myvue(myvue是我取的專案名,

WCF學習筆記---我的第一個WCF程式

一、建立WCF程式   1.建立一個控制檯程式(WCFBlog)   2.新增wcf專案   3.將預設的IService1和Service1改成自己的名字   4.在ICalculateService裡寫契約 // TODO

Spring學習筆記:眼見為實,先上一個簡單例子

概述 所謂眼見為實,Spring雖然是一個輕量級的框架,但涉及眾多的概念,理解起來並不容易,因此,先參考資料寫一個簡單的Demo,從中洞見Spring的大體工作流程,為後面深入學習做鋪墊。 本文的Demo很簡單:模擬圖書資料訪問服務,即向資料庫中新增圖書資訊,涉及IBoo

Spring Boot學習實踐1建立一個簡單的spring boot應用

一、使用idea建立一個簡單的Spring Boot應用程式 環境準備: idea:2018.2 jdk: 1.8 spring boot:是2.0版本以上的 以上環境可以根據實際情況去調整。 (1)首先找到idea建立應用的New Project,選擇好

nodejs學習筆記——nodejs的安裝和啟動第一個httpserver

對於一個前臺開發而言,沒有使用過nodejs簡直是一種恥辱,不過什麼時候開始都不算晚,故以下是筆者在洗刷恥辱過程中的一點經驗,供大家分享。 入門是在runoob的教程指導下開始的,但是教程裡面更多的是介紹nodejs裡面這個功能是怎麼玩,很少會提及在實際的開發過程中應該怎

Docker 學習筆記:Docker 基本命令 和 用 Dockerfile build 一個 JDK 映象

本文件為學習筆記,部分內容將持續更新。 注:本人信仰用最簡單的方式去做一些事,怎麼簡單怎麼來,也許不求甚解。 Docker 基本命令 docker version 獲取 docke

MyBatis學習筆記---一個簡單MyBatis示例

public class Test { private static SqlSessionFactory sqlSessionFactory= MyBatisUtil.getSqlSessionFactory(); public static void main(String args[]

Hibernate學習筆記之——根據配置檔案自動建立表的兩種方式註解方式和配置檔案方式

環境準備:jdk  eclipse   hibernate、mysql jar包 專案截圖: Student是根據配置檔案建立表,Teacher是根據註解建立表 Student.java package com.java1234.model; publi

android自定義View學習----建立一個檢視類

建立一個檢視類 精心設計的自定義檢視與其他精心設計的類非常相似。它使用易於使用的介面封裝了一組特定的功能,它可以高效地使用CPU和記憶體,等等。不過,作為一個設計良好的班級,自定義檢視應該: 符合Android標準 提供適用於Android XML佈局的自