• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SpringBoot+Dubbo+Zookeeper搭建教程

    標簽: 分布式  微服務  無xml

    SpringBoot+Dubbo+Zookeeper搭建教程

    寫在前面的話:技術路上的坑只能一個一個的踩過去了嗎?以為很簡單,但還是浪費了很長時間。。。這是目前發現的配置最簡單的一種搭建方式。

    項目GitHub地址
    https://github.com/libaolei007/springboot-dubbo-zookeeper

    搭建前需要安裝Zookeeper
    https://blog.csdn.net/weixin_39819880/article/details/98472507

    一.創建名稱為springboot-dubbo-zookeeper的Maven項目

    [外鏈圖片轉存失敗(img-yV6AajbX-1565009124199)(./1564998595032.png)]
    [外鏈圖片轉存失敗(img-QVh23HcI-1565009124209)(./1564998819596.png)]
    [外鏈圖片轉存失敗(img-VXqgV39c-1565009124213)(./1564998842144.png)]
    項目創建完成之后,注意檢查一下Maven的配置
    [外鏈圖片轉存失敗(img-RRmm0Efh-1565009124214)(./1564998876851.png)]

    二.創建module名稱為api的Maven項目

    api中一般存放entity實體類和service接口,consumer和provider模塊都需要依賴這個模塊。

    [外鏈圖片轉存失敗(img-KInJZl2C-1565009124216)(./1564999157148.png)]
    [外鏈圖片轉存失敗(img-mYaAcW7T-1565009124217)(./1564999176900.png)]
    [外鏈圖片轉存失敗(img-Q6sXpfe5-1565009124218)(./1564999188738.png)]
    [外鏈圖片轉存失敗(img-m9YCiT5n-1565009124219)(./1564999203078.png)]

    三.創建module名稱為consumer的springboot項目

    consumer作為消費者的角色,可以存放controller控制類,當然,如果有其他的,比如攔截器,權限控制,也可以放這里。

    [外鏈圖片轉存失敗(img-EDZDy09E-1565009124220)(./1564999157148.png)]

    [外鏈圖片轉存失敗(img-WnXWXFzt-1565009124223)(./1564999306606.png)]
    [外鏈圖片轉存失敗(img-bmfpO6SK-1565009124224)(./1564999354501.png)]
    [外鏈圖片轉存失敗(img-nbUzF6tO-1565009124228)(./1564999372809.png)]
    [外鏈圖片轉存失敗(img-6pfqehkc-1565009124230)(./1564999387344.png)]

    四.創建module名稱為provider的springboot項目

    provider作為消費者角色,可以存放service接口的實現類,如果項目中集成了mybatis,也可以放在這個模塊下

    [外鏈圖片轉存失敗(img-DvKyfMTS-1565009124231)(./1564999157148.png)]

    [外鏈圖片轉存失敗(img-6sBakOka-1565009124233)(./1564999306606.png)]

    [外鏈圖片轉存失敗(img-RKuU7vLy-1565009124234)(./1564999542543.png)]
    [外鏈圖片轉存失敗(img-xfyiS1CO-1565009124235)(./1564999372809.png)]

    [外鏈圖片轉存失敗(img-kPiVB8Gb-1565009124236)(./1564999589906.png)]

    五.項目配置

    1.配置springboot-dubbo-zookeeper

    在springboot-dubbo-zookeeper的pom.xml文件添加module依賴

     <modules>
            <module>api</module>
            <module>consumer</module>
            <module>provider</module>
        </modules>
    
    

    [外鏈圖片轉存失敗(img-hujZgZGY-1565009124237)(./1564999808550.png)]

    2.配置api
    2.1配置api的pom.xml

    添加

        <packaging>jar</packaging>
    
    

    [外鏈圖片轉存失敗(img-Qa6zAUzV-1565009124238)(./1565000199936.png)]

    2.2創建DemoService接口
    package com.rpc.api;
    
    public interface DemoService {
        String sayHello(String name);
    }
    
    

    [外鏈圖片轉存失敗(img-8OhtlkxK-1565009124239)(./1565000077208.png)]

    3.配置consumer
    3.1配置consumer的pom.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.rpc.consumer</groupId>
        <artifactId>consumer</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>consumer</name>
        <description>Demo project for Spring Boot</description>
        <packaging>jar</packaging>
    
        <properties>
            <java.version>1.8</java.version>
            <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
        </properties>
    
        <dependencies>
            <!-- 添加對api模塊的依賴 -->
            <dependency>
                <groupId>com.rpc.demo</groupId>
                <artifactId>api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!-- Spring Boot Dubbo 依賴 -->
            <dependency>
                <groupId>io.dubbo.springboot</groupId>
                <artifactId>spring-boot-starter-dubbo</artifactId>
                <version>${dubbo-spring-boot}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>slf4j-log4j12</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    主要修改三點:
    在這里插入圖片描述

    3.2配置consumer的application.properties
    ## 避免和provider工程端口沖突
    server.port=7001
    ## Dubbo 服務消費者配置
    spring.dubbo.application.name=consumer
    ## Dubbo 服務對象的注冊中心zookeeper的地址和端口
    spring.dubbo.registry.address=zookeeper://192.168.19.22:2181
    ##  服務對象的被注入的包掃描范圍
    spring.dubbo.scan=com.rpc.consumer.controller
    
    
    
    3.3建立DemoController類
    package com.rpc.consumer.controller;
    
    import com.alibaba.dubbo.config.annotation.Reference;
    import com.rpc.api.DemoService;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/demo")
    public class DemoController {
    
        @Reference(version = "1.0.0")
        private DemoService demoService;
    
        @RequestMapping("/getHello")
        public String getHello() {
            return demoService.sayHello("李保磊");
        }
    
    }
    
    
    
    4.配置provider
    4.1配置provider的pom.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.6.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.rpc.provider</groupId>
        <artifactId>provider</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <name>provider</name>
        <description>Demo project for Spring Boot</description>
        <packaging>jar</packaging>
    
        <properties>
            <java.version>1.8</java.version>
            <dubbo-spring-boot>1.0.0</dubbo-spring-boot>
        </properties>
    
        <dependencies>
            <!-- 添加對api模塊的依賴 -->
            <dependency>
                <groupId>com.rpc.demo</groupId>
                <artifactId>api</artifactId>
                <version>1.0-SNAPSHOT</version>
            </dependency>
            <!-- Spring Boot Dubbo 依賴 -->
            <dependency>
                <groupId>io.dubbo.springboot</groupId>
                <artifactId>spring-boot-starter-dubbo</artifactId>
                <version>${dubbo-spring-boot}</version>
                <exclusions>
                    <exclusion>
                        <artifactId>slf4j-log4j12</artifactId>
                        <groupId>org.slf4j</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <!-- zookeeper -->
            <dependency>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
                <version>3.4.12</version>
            </dependency>
            <dependency>
                <groupId>com.github.sgroschupf</groupId>
                <artifactId>zkclient</artifactId>
                <version>0.1</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
    

    主要修改四點
    [外鏈圖片轉存失敗(img-x65HNIO4-1565009124245)(./1565003802956.png)]

    4.2配置provider的application.properties
    server.port=8001
    ## Dubbo 服務提供者配置
    spring.dubbo.application.name=provider
    ## Dubbo 服務對象的注冊中心zookeeper的地址和端口
    spring.dubbo.registry.address=zookeeper://192.168.19.22:2181
    ## 用Dubbo協議在20880端口暴露服務
    spring.dubbo.protocol.name=dubbo
    spring.dubbo.protocol.port=20880
    ## 包掃描范圍
    spring.dubbo.scan=com.rpc.provider.impl;
    
    4.3創建DemoServiceImpl.java

    @Service注解,是dubbo提供的注解

    
    package com.rpc.provider.impl;
    
    import com.alibaba.dubbo.config.annotation.Service;
    import com.rpc.api.DemoService;
    
    @Service(version = "1.0.0")
    public class DemoServiceImpl implements DemoService {
    
        @Override
        public String sayHello(String name) {
            return "Hello" + name;
        }
    }
    
    
    
    5.項目啟動
    5.1 啟動zookeeper

    首先要啟動zookeeper,它是注冊中心,沒有啟動的話,provider的服務提供者怎么注冊呢?

    5.2 將api安裝到consumer和provider模塊中

    注意,由于consumer和provider都依賴api,那么要將api模塊通過maven,依次通過clean,install命令,將api安裝到consumer和provider模塊中。

    在這里插入圖片描述

    5.3 啟動provider

    啟動provider,將服務注冊到zookeeper中心

    [外鏈圖片轉存失敗(img-PR3RIODx-1565009124248)(./1565004914483.png)]

    5.4啟動consumer
    5.5測試

    @Reference注解引入的service實例為null
    我哭了,你呢???

    哭了幾個小時之后,我好了!

    我的原因是:

    首先檢查一下你的spring boot版本是多少?
    如果是2.X 不用看了,spring boot 2.x 必定會出現這個問題,
    改為 1.5.8 版本。

    在這里插入圖片描述
    將consumer和provider里面的pom.xml文件里的parenet標簽下的version標簽內容改為1.5.8.RELEASE

     <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>1.5.8.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
    版權聲明:本文為weixin_39819880原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_39819880/article/details/98518202

    智能推薦

    ELK快速搭建教程

    ELK是什么 E: elasticsearch L: logstash K: kibana 資源下載 鏈接:https://pan.baidu.com/s/1cs54SshXveG68IGW3FXSWQ 提取碼:pk9s 本教程統一采用的6.6.2版本,其余版本安裝類似 安裝Elasticsearch 在服務器上新建一個名為ELK的目錄 將安裝包放到服務器上到 /opt/ELK目錄下 解壓這三個文...

    springboot搭建教程

     之前一直在搜索教程搭ssh環境,結果一大堆配置文件搞的我很煩。特別是集成hibernate的時候。。遂室友薦springboot搭建之,結果不到10分鐘就搭完了,分享一下心得。 目錄結構 controller 實體類...

    搭建maven私服教程

    Maven私服原理 1.一些無法從外部倉庫下載的構件,例如內部的項目還能部署到私服上,以便供其他依賴項目使用。 2. 為了節省帶寬和時間,在局域網內架設一個私有的倉庫服務器,用其代理所有外部的遠程倉庫。當本地Maven項目需要下載構件時,先去私服請求,如果私服沒有,則再去遠程倉庫請求,從遠程倉庫下載構件后,把構件緩存在私服上。這樣,及時暫時沒有Internet鏈接,由于私服已經緩存了大量構件,整個...

    OAI rfsimulator搭建教程

    OAI 搭建教程 本文說明了在ubuntu18.04虛擬機中,使用rfsimulator代替usrp進行仿真,搭建OAI的具體過程 一、安裝Ubuntu 1、 使用VMware安裝虛擬機,選擇ubuntu18.04 2、 安裝完系統之后先調整屏幕大小(安裝vmware tools) 在VMware軟件中,右鍵單擊虛擬機(Ubuntu 64位),安裝VMware Tools。 在ubuntu桌面上打...

    Hadoop搭建kafka教程

    1.kafka與zookeeper版本對照 2.解壓kafka 3.修改server.properties 4.啟動kafka 啟動后會刷一波日志然后看到如下信息: 5.驗證: :未寫完,因為只有主節點配好了,倆子節點沒有配好。...

    猜你喜歡

    Jenkins搭建教程

    一、Jenkins簡介 Jenkins是基于Java開發的一種持續集成工具,用于監控持續重復的工作,旨在提供一個開放易用的軟件平臺,它提供了數百個插件來支持構建、部署、自動化任何項目,使軟件的持續集成變成可能。 我剛還換新工作,老大叫我部署Jenkins才開始接觸這個,下面就聊聊我的搭建過程吧~~ 二、環境部署 我是在Ubuntu18.04服務器上搭建的 Java環境 因為Jenkins是基于Ja...

    Hadoop集群搭建教程

    1、準備工作: 由于hadoop是基于java的,所以需要預先安裝jdk,安裝jdk的教程可參考這篇:https://blog.csdn.net/qq_34566673/article/details/107797472 準備好著兩個壓縮包,通過xftp傳至虛擬機中 2、安裝: 通過tar命令將hadoop主文件解壓至指定目錄 tar -zxvf hadoop-2.6.0-cdh5.14.2.ta...

    Vuepress博客搭建教程

    Vuepress博客搭建教程 vuepress搭建博客地址 環境搭建 安裝node 打開vuepress官網 配置下npm啟動下看看 繼承主題開發 大概目錄結構 官方主題繼承 引入element 官方說明 我們在這個文件中引入element 原主題的組件 配置md文件frontmatter 拿取frontmatter數據 官方文檔獲取全局計算屬性 本博客源碼地址 博客地址...

    Unity_Shader高級篇_13.1_Unity Shader入門精要

    13.4 再談邊緣檢測 在12.3中,我們曾使用Sobel算子對屏幕圖像進行邊緣測試,實現描邊的效果。但是,這種直接利用顏色信息進行邊緣檢測的方法會產生很對我們不希望得到的邊緣線,如圖13.8所示。 可以看出,物體的紋理、陰影等位置也被描上黑邊,而這往往不是我們希望看到的。在本節中,我們將學習如何在深度和法線上進行邊緣檢測,這些圖像不會受紋理和光照的影響,而僅僅保存了當前渲染物體的模型信息,通過這...

    Seata AT 模式 原理詳解

    目錄 前提 整體機制 寫隔離 讀隔離 工作機制 一階段 二階段-回滾 二階段-提交 附錄 回滾日志表 前提 基于支持本地 ACID 事務的關系型數據庫。 Java 應用,通過 JDBC 訪問數據庫。 整體機制 兩階段提交協議的演變: 一階段:業務數據和回滾日志記錄在同一個本地事務中提交,釋放本地鎖和連接資源。 二階段: 提交異步化,非常快速地完成。 回滾通過一階段的回滾日志進行反向補償。 寫隔離 ...

    精品国产乱码久久久久久蜜桃不卡