springboot+dubbo+zookeeper

一個會寫程式碼的文藝青年發表於2020-10-21

本文將實現使用springboot+dubbo+zookeeper搭建能夠提供遠端服務的架構

 

目錄

一. 環境搭建

1. 搭建zookeeper服務

2. 下載dubbo-admin專案,監控服務

二. 建立專案

1. IDEA建立專案

2. 匯入依賴

3. 修改配置檔案,連線zookeeper

4. 呼叫服務


 

一. 環境搭建

1. 搭建zookeeper服務

1.1 進入zookeeper官網進行下載

https://zookeeper.apache.org/releases.html

注:zookeeper從3.5.x 左右開始,就分為兩個包下載,一個是bin的,我們就下載這個bin的,因為這個是已經編譯過的,zookeeper可以直接執行。

1.2 啟動zookeeper服務

將下載好的壓縮包解壓後,進入到conf目錄下,並copy一份zoo_sample.cfg命名為zoo.cfg(因為zookeeper啟動預設會使用改檔名)

在zoo.cfg中,可以檢視zookeeper的埠配置等資訊

然後進入bin路徑下,啟動zookeeper服務,執行zkServer.cmd(Linux執行.sh 檔案)

1.3 排坑

如果服務啟動失敗閃退,通過cmd視窗執行可以檢視報錯資訊

如果是JDK問題,可能是java環境變數JAVA_HOME路徑帶有空格。重新設定下環境變數即可。

1.4 測試

zookeeper服務啟動後,可以執行zkCli.cmd啟動客戶端,測試能夠連線成功

2. 下載dubbo-admin專案,監控服務

dubbo-admin專案時dubbo開發的一個用於檢測dubbo服務的開源專案。使用該專案可以很好的監控服務程式

2.1 下載原始碼

dubbo-admin的專案託管在github上,可以通過地址:https://github.com/apache/dubbo-admin  下載master分支專案到本地

2.2 執行專案

修改配置檔案,可以修改zookeeper連線的IP:

在dubbo-admin專案中的resource下有個application.properties檔案,可以修改需要監控的zookeeper服務、埠等

將專案通過mvn打包:mvn clean install -Dmaven.test.skip=true

將生成的jar包執行即可訪問,預設的賬號密碼是:root/root

二. 建立專案

本例將建立三個專案

provider:服務提供者(介面暴露給zookeeper,供別人遠端呼叫)

cosumer:服務消費者(呼叫provider的介面)

common:公共實體類

dubbo呼叫RPC遠端服務的本質就是將service實現類註冊為一個bean,然後通過dubbo的通訊方式完成呼叫。

1. IDEA建立專案

首先建立一個空白專案,然後建立三個springboot專案的module

2. 匯入依賴

要想使用dubbo,就需要匯入對應的依賴

<!-- Dubbo Spring Boot Starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.3</version>
        </dependency>
        <!--zookeeper-->
        <!-- https://mvnrepository.com/artifact/com.github.sgroschupf/zkclient -->
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
        <!-- 引入zookeeper -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>2.12.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
            <!--排除這個slf4j-log4j12-->
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

3. 修改配置檔案,連線zookeeper

在provider和cosumer專案中,修改配置檔案,連線zookeeper:

對弈provider來說,需要設定掃描的包路徑,並且將需要暴露的服務,用dubbo提供的Service修飾

package com.lemon.provider.service;
import com.lemon.common.pojo.UserPO;
import org.apache.dubbo.config.annotation.Service;

/**
 * dubbo服務提供介面
 * 匯入的是dubbo下的service註解,指定服務版本,以及該服務對應的介面類,預設是實現的介面
 * @Date 2020/10/21 11:45
 **/
@Service(version = "1.0.0", interfaceClass = TestService.class)
public class TestServiceImpl implements TestService{

    @Override
    public UserPO test() {
        UserPO po = new UserPO();
        po.setId(1);
        po.setName("測試使用者");
        return po;
    }
}

4. 呼叫服務

此時啟動provider可以再dubbo-admin中監測到我們啟動的服務了

編寫消費者,呼叫服務介面測試:

package com.lemon.cosumer.controller;
import com.lemon.common.pojo.UserPO;
import com.lemon.provider.service.TestService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Date 2020/10/21 12:30
 **/
@RestController
public class Test {

    //dubbo提供的呼叫遠端服務的註解
    @Reference
    TestService testService;

    @RequestMapping("/test")
    public String test() {
        UserPO po = testService.test();
        return "通過dubbo服務獲取的使用者名稱是:" + po.getName() + ",使用者ID是:" + po.getId();
    }
}

測試完成:

更多詳細資訊,請參考github地址原始碼:

https://github.com/leanmTree/springboot_dubbo

 

 

 

 

 

 

 

 

 

+