Dubbo學習(二):開發(fā)第一款Dubbo程序

前言

這篇文章主要從搭建Dubbo程序開發(fā)所需環(huán)境森逮、編寫Dubbo服務器和客戶端稠茂、構建并運行我的第一款Dubbo應用程序三個方面來記錄Dubbo學習的第二篇文章。

配置開發(fā)環(huán)境

要編譯和運行本片文章相關代碼叮盘,會使用JDK和Maven這兩個工具课舍,其他工具都是輔助性的。

下載并安裝JDK

首先檢查系統(tǒng)是否已經安裝好了JDK谐宙,在終端輸入命令:

java -version

終端打印如下信息烫葬,則可以會略JDK安裝(已成功安裝):

image.png

否則,可以用在 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 中下載最新的JDK8.注意:下載時候需要針對自己的操作系統(tǒng)去下載。

windowns平臺下需要做一些手動配置搭综,可以參考 windows開發(fā)環(huán)境搭建手冊

下載并安裝IDE

下面是當前比較流行的IDE工具下載地址垢箕,可以免費獲取這些工具:
(1)Intellij IDEA : www.jetbrains.com
(2)Eclipse:www.eclipse.org
(3)NetBeans:www.netbeans.org
(4)visual Studio Code:www.visualstudio.micresoft.com

這里推薦Intellij IDEA,因為IDEA的功能非常齊全兑巾。

下載并配置Maven

可以在 http://maven.apache.org/中下載Maven舰讹。和配置JDK一樣簡單,首先下載的Maven解壓縮到任意目錄闪朱,我們稱為【安裝目錄】,在【安裝目錄】中包含類似apache-maven-x.x.x 的文件夾钻洒。
然后我們可以參考一下操作進行環(huán)境變量的配置:

Mac/Linux系統(tǒng):
(1)將環(huán)境變量M2_HOME 指向【安裝目錄】/apache-maven-x.x.x奋姿。
(2)將$M2_HOME/bin添加到可執(zhí)行路徑,方便在中斷執(zhí)行Maven命令素标。

Windows系統(tǒng):
(1)將環(huán)境變量M2_HOME指向【安裝目錄】/apache-maven-x.x.x称诗。
(2)將%M2_HOME%\bin添加到可執(zhí)行路徑,方便在終端執(zhí)行Maven命令头遭。

image.png

比如我的是解壓到/usr/local下:


image.png

maven環(huán)境變量配置:

image.png

中斷輸入 mvn -v 驗證maven是否安裝配置正常寓免,正常情況打印如下信息:

image.png

下載并配置Zookeeper

盡管Zookeeper不是必需的,但是在生產環(huán)境中已經大量使用Zookeeper作為Dubbo注冊中心计维。為了深入理解Dubbo袜香,這里給出配置單機Zookeeper的步驟,方便本地啟動Dubbo鲫惶。在 http://mirrors.shu.cn/apache/zookeeper/ 中下載最新的版本蜈首。

以3.5.6版本為例:
(1)加壓縮apache-zookeeper-3.5.6.tar.gz 文件到任意目錄(這里我還是選用/usr/local下)。
(2)將環(huán)境變量ZOOKEEPER_HOME指定【安裝目錄】/apache-zookeeper-3.5.6
(3)將${ZOOKEEPER_HOME}/bin 添加到可執(zhí)行路徑欠母,方便在終端執(zhí)行ZK命令欢策。
在【安裝目錄】\apache-zookeeper-3.5.6\conf 中復制一份zoo_sample.cfg 并重命名為zoo.cfg, 然后在終端執(zhí)行 zkServer.sh start 即可,默認會監(jiān)聽 2181 端口赏淌。

解壓目錄:

image.png

Zookeeper環(huán)境變量配置:

image.png

啟動Zookeeper:

image.png

使用IDEA調試Dubbo源碼

1. 下載源碼

這里下載最新版本的2.7.4.1踩寇,首先登陸并訪問GitHub https://github.com/apache/dubbo, 可選擇git或者Zip包任一下載方式:

image.png

使用Git的話,先選擇指定目錄六水,執(zhí)行Git clone命令俺孙,等待工程下載完畢即可:

git clone https://github.com/apache/dubbo.git
2.導入工程

將工程導入IDE,導入后結構如下:

下面對幾個核心模塊做進一步說明缩擂,可以對比我的上一篇文章Dubbo學習(一):什么是Dubbo
中的Dubbo分層一起理解下:

image.png
3.安裝dubbo admin

方法1鼠冕、解壓后,根目錄里存在dubbo-admin胯盯,進入 mvn package -Dmaven.test.skip=true 安裝完后懈费,生成target目錄,進入這個目錄博脑,找到dubbo-admin這個目錄憎乙,把這個目錄全部copy到tomcat的目錄webapps下的ROOT下面(刪除tomcat webapps目錄下ROOT原有內容)

方法2票罐、解壓后,根目錄里存在dubbo-admin泞边,進入 mvn install -Dmaven.test.skip=true 安裝完后该押,生成target目錄,進入這個目錄阵谚,找到dubbo-admin.war蚕礼,把這個war包copy到tomcat的目錄webapps下的ROOT下面(刪除tomcat webapps目錄下ROOT原有內容),然后使用jar xvf dubbo-admin.war解壓war包梢什,把解壓后的內容全部放到ROOT目錄下

啟動tomcat奠蹬,就可以看到dubbo-admin的界面,默認帳號密碼root/root

image.png

啟動tomcat方法:進入目錄/home/admin/apache-tomcat-8.5.24/bin嗡午,然后執(zhí)行

./startup.sh
4.代碼調試

如果只是想進行一個簡單的Dubbo調用演示囤躁,那么我們可以使用dubbo-demo模塊,該模塊可以演示一個完整的消費者調用服務提供者的過程荔睹。

首先需要啟動dubbo-demo-provider,然后啟動dubbo-demo-consumer,直接運行對應模塊的main方法即可狸演。由于Demo使用的是廣播模式,所以需要先啟動Provider僻他。此時Consumer不斷的調用Provider的com.alibaba.dubbo.demo.DemoService#sayHello,這里剛安裝了Zookeeper宵距,所以我想順便測試一下ZK是否連接正常,我將dubbo-provider和dubbo-consumer的配置修改為發(fā)布訂閱的方式中姜,配置我的ZK地址消玄。

image.png

Consumer消費控制臺打印結果如下:

image.png

同時我的Dubbo Admin可以看到這個新注冊的服務信息:

image.png

實現我的第一個Dubbo程序

Dubbo實現的方式有多種:基于XML配置基于注解方式丢胚、基于API實現翩瓜。

這里我將以XML實現為例演示,其他方式實現原理一樣的携龟,感興趣可以去了解下兔跌,示例很簡單:服務器會接收到客戶端發(fā)來的消息,然后將消息不做任何處理返回給客戶端峡蟋。

所有的Dubbo服務接口都可以直接通過配置對外暴露坟桅,但用戶不需要額外編寫服務暴露的代碼,因為這些都被Dubbo框架隱藏了蕊蝗,用于減低框架的使用門檻仅乓,我們只需要專注一下內容:
(1)關注業(yè)務場景,編寫面向接口的業(yè)務代碼
(2)少量的啟動配置蓬戚,比如配置中心和暴露的協(xié)議等

說明:為了便于演示和理解夸楣,這里我使用SpringBoot分別搭建兩個應用dubbo-provider與dubbo-consumer來演示這個服務注冊與發(fā)現的流程,也能加深對Dubbo的理解。spring boot應用快速搭建及配置可參考我的這篇文章: SPRINGBOOT基礎豫喧、亮點及輕松搭建SPRINGBOOT項目

基于XML實現

Dubbo框架時面向接口的RPC調用框架石洗,需要提供一個新的接口來作為服務暴露的使用,該接口會響應傳入的消息紧显。

首先需要引入dubbo讲衫、zookeeper相關依賴到Spring Boot的pom.xml:

<!--dubbo 依賴 -->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
        
        <!-- zookeeper client依賴 -->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

修改配置application.properties:

spring.application.name=dubbo-provider
server.port=8088

zookeeper.hosts=zookeeper://遠程或者本地ZK地址:2181

比如,首先我需要在dubbo-provider項目中聲明并暴露一個MessageXMLService.java的接口:

接口定義:

package com.dubbo.dubboprovider.service;

/**
 * @Author: 王琦 <QQ.Eamil>1124602935@qq.com</QQ.Eamil>
 * @Date: 2019-11-1 0001 0:28
 * @Description: 無描述信息
 */
public interface MessageXMLService {

    String message(String msg);
}

實現類:

package com.dubbo.dubboprovider.service.impl;

import com.dubbo.dubboprovider.service.MessageXMLService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Author: 王琦 <QQ.Eamil>1124602935@qq.com</QQ.Eamil>
 * @Date: 2019-11-1 0001 0:28
 * @Description: 無描述信息
 */
public class MessageXMLServiceImpl implements MessageXMLService {

    private static final Logger LOGGER = LoggerFactory.getLogger(MessageXMLServiceImpl.class);

    @Override
    public String message(String msg) {
        LOGGER.info("dubbo provider receive message: {}", msg);
        return msg+": 嘻嘻嘻";
    }
}

resource下創(chuàng)建一個spring文件夾,在spring文件夾下創(chuàng)建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"/>

    <!-- 使用遠程的Zookeeper作為注冊中心 -->
    <dubbo:registry address="${zookeeper.hosts}"/>

    <!-- 只用Dubbo協(xié)議并且指定監(jiān)聽20880端口 -->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!-- 通過XML方式吧實現配置為Bean涉兽, 讓Spring托管和實例化 -->
    <bean id="messageXMLService" class="com.dubbo.dubboprovider.service.MessageXMLServiceImpl"/>

    <!-- 聲明要暴露的服務 -->
     <!-- 聲明要暴露的服務 -->
    <dubbo:service interface="com.dubbo.dubboprovider.service.MessageXMLService" ref="messageXMLService" version="0.0.1"/>
</beans>

修改springBoot啟動類,引入XML配置:

package com.dubbo.dubboprovider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;

// 引入配置
@ImportResource("classpath:spring/dubbo-provider.xml")
@SpringBootApplication
public class DubboProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(DubboProviderApplication.class, args);
    }

}

dubbo-consumer:

  1. 同樣需要引入上面的dubbo有zookeeper依賴篙程,同時需要引入provider client的jar依賴花椭。

2.編寫一個Controller,依賴MessageXMLService:

@RestController
@RequestMapping("/api")
public class ConsumerController {

    @Autowired
    MessageXMLService messageXMLService;

    @GetMapping("/send/{msg}")
    public String send(@PathVariable String msg){
       return messageXMLService.message(msg);
    }
}

3.配置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-provider"/>

    <!-- 使用遠程的Zookeeper作為注冊中心 -->
    <dubbo:registry address="${zookeeper.hosts}"/>

    <!-- 只用Dubbo協(xié)議并且指定監(jiān)聽20880端口 -->
    <dubbo:protocol name="dubbo" port="20880"/>

    <dubbo:reference id="messageXMLService" interface="com.dubbo.dubboprovider.service.MessageXMLService"
                     version="0.0.1" timeout="5000" check="false"/>
</beans>

測試結果:

image.png

總結

這篇文章主要從搭建Dubbo程序開發(fā)所需環(huán)境、Dubbo Admin搭建丹允,編寫Dubbo服務器和客戶端郭厌、構建并運行我的第一款基于XML配置實現的dubbo服務。

更多個人博客雕蔽,歡迎訪問我的個人博客網:Tec博客

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末折柠,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子批狐,更是在濱河造成了極大的恐慌扇售,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嚣艇,死亡現場離奇詭異承冰,居然都是意外死亡,警方通過查閱死者的電腦和手機食零,發(fā)現死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門困乒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贰谣,你說我怎么就攤上這事娜搂。” “怎么了吱抚?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵百宇,是天一觀的道長。 經常有香客問我秘豹,道長携御,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮因痛,結果婚禮上婚苹,老公的妹妹穿的比我還像新娘。我一直安慰自己鸵膏,他們只是感情好膊升,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著谭企,像睡著了一般廓译。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上债查,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天非区,我揣著相機與錄音,去河邊找鬼盹廷。 笑死征绸,一個胖子當著我的面吹牛,可吹牛的內容都是我干的俄占。 我是一名探鬼主播管怠,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缸榄!你這毒婦竟也來了渤弛?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甚带,失蹤者是張志新(化名)和其女友劉穎她肯,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體鹰贵,經...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡晴氨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了碉输。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑞筐。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖腊瑟,靈堂內的尸體忽然破棺而出聚假,到底是詐尸還是另有隱情,我是刑警寧澤闰非,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布膘格,位于F島的核電站,受9級特大地震影響财松,放射性物質發(fā)生泄漏瘪贱。R本人自食惡果不足惜纱控,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菜秦。 院中可真熱鬧甜害,春花似錦、人聲如沸球昨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽主慰。三九已至嚣州,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間共螺,已是汗流浹背该肴。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留藐不,地道東北人匀哄。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像雏蛮,于是被迫代替她去往敵國和親拱雏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內容