1. 程式人生 > 其它 >基於SpringBoot整合Dubbo+Zookeeper

基於SpringBoot整合Dubbo+Zookeeper

一、基本介紹

1、Dubbo(讀音[ˈdʌbəʊ]):是阿里巴巴公司開源的一個高效能優秀的SOA分散式服務框架,使得應用可通過高效能的 RPC 實現服務的輸出和輸入功能,可以和Spring框架無縫整合。(此處的RPC為遠端呼叫,相當於SpringCloud框架集裡的Feign元件;負責均衡,相當於SpringCloud框架集裡的Ribbon元件)=>Dubbo=Feign(RPC遠端呼叫:消費方+服務方)+Ribbon(負載均衡)

2、ZooKeeper:是Google的Chubby一個開源的分散式應用程式協調服務,是Google的Chubby一個開源的實現,是Hadoop和Hbase的重要元件。它是一個為分散式應用提供一致性服務的軟體,提供的功能包括:配置維護、域名服務、分散式同步、組服務等。

=>ZooKeeper(zk)=eureka(SpringCloud提供的註冊中心元件:服務註冊及發現)

3、兩者的關係:官方推薦使用ZooKeeper作為Dubbo的註冊中心

 

二、安裝配置

1、安裝配置過程

//ZooKeeper
1、下載
連結:https://pan.baidu.com/s/1dukbp2Ld54Mqtnt9F6Igyw 
提取碼:o8e6
2、安裝
解壓
3、配置
(1)複製zookeeper-3.4.14\conf\zoo_sample.cfg,重新命名為zoo.cfg
(2)開啟zoo.cfg,新增data目錄及log目錄的路徑配置
#dataDir=/tmp/zookeeper
dataDir
=D:\\Study\\other\\Dubbo_ZooKeeper\\DownLoad\\temp\\data dataLogDir=D:\\Study\\other\\Dubbo_ZooKeeper\\DownLoad\\temp\\log 4、執行 (1)開啟cmd (2)切換至目錄zookeeper-3.4.14\bin (3)執行zkServer.cmd //Dubbo 1、下載 連結:https://pan.baidu.com/s/193xCvde4clGJRXShTP14mg 提取碼:x9rt 2、安裝 解壓 3、配置及執行 (1)cmd進入目錄Dubbo\dubbo-dubbo-2.5.8\dubbo-admin (
2)執行mvn clean install命令,進行專案打包(注:打包過程可能需要耗時大約30分鐘) (3)將dubbo.war包放入tomcat的webapps目錄下 (4)然後到tomcat的bin目錄下執行startup.bat,啟動tomcat 4、訪問 (1)瀏覽器輸入localhost:8080/dubbo-admin-2.5.8,如果啟動成功就可以在瀏覽器訪問dubbo頁面了,登入使用者和密碼:root/root 注:8080埠指的是你的本地tomcat實際執行埠,dubbo-admin-2.5.8為專案名

 

2、成果

(1)Zookeeper啟動成功

 

 

(2)Dubbo配置成功

//打包成功

 

 

 

 

//啟動成功

 

 

 

 

三、整合DUbbo和ZooKeeper

1、整合過程

//基於SpringBoot進行DUbbo和Zookeeper整合(目錄結構如圖所示)
1、建立父專案:DubboAndZookeeper_study
//新增相關的配置:父框架、編碼及JDK版本配置、公共依賴集、工具集
<!-- 引入繼承SpringBoot框架父依賴 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.17.RELEASE</version>
        <relativePath/>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <!-- 引入SpringBoot的測試依賴 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <!-- zookeeper -->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2、建立公共服務api子專案:common_api
//建立公共api介面
/**
 * 提供公共服務api介面
 */
public interface HelloService {

    public String sayHello(String message);
}

3、建立服務提供者子專案:service_provider
//實現服務介面(需要注意的是此處的Service註解為dubbo的註解!!)
/**
 * 服務提供方:實現公共api介面
 */
@Service(interfaceClass = HelloService.class)
public class HelloServiceImpl implements HelloService {

    public String sayHello(String message){
        return "hello:"+message;
    }
}
//新增專案啟動類
/**
 * 專案啟動類
 */
@EnableDubbo
@SpringBootApplication
public class MainApplication {

    public static void main(String[] args){
        SpringApplication.run(MainApplication.class,args);
    }
}
//新增專案配置
server:
  port: 9001
dubbo:
  application:
    # 服務名稱,保持唯一
    name: server-provider
  # zookeeper地址,用於向其註冊服務
  registry:
    protocol: zookeeper
    address: zookeeper://127.0.0.1:2181
  protocol:
    name: dubbo
    port: 20880
  scan:
    base-packages: com.lkw.impl

4、建立服務消費者子專案:service_consumer
//新增控制器,用於訪問服務
/**
 * 服務消費方:請求呼叫服務
 */
@RestController
public class HelloController {

    @com.alibaba.dubbo.config.annotation.Reference
    private HelloService helloService;


    @RequestMapping("/sayHello")
    public String sayHello(String message){

        return helloService.sayHello(message);
    }
}
//新增專案啟動類
/**
 * 專案啟動類
 */
@SpringBootApplication
@EnableDubboConfig
public class MainApplication {

    public static void main(String[] args){
        SpringApplication.run(MainApplication.class,args);
    }
}
//新增專案配置
server:
  port: 9003
dubbo:
  application:
    # 服務名稱,保持唯一
    name: server-consumer
  # zookeeper地址,用於向其註冊服務
  registry:
    protocol: zookeeper
    address: zookeeper://127.0.0.1:2181
  scan:
    base-packages: com.lkw.controller

5、除錯
//啟動service_provider
//啟動service_consumer
//訪問dubbo,觀察註冊中心是否已發現提供者和消費者兩個應用,以及服務HelloService
//瀏覽器模擬客戶端訪問service_consumer:localhost:9003/sayHello,觀察頁面顯示,通過dubbo實現rpc訪問是否成功

 

2、成果

(1)目錄結構

 

 

 

 

(2)基於ZooKeeper的Dubbo服務發現生效

 

 

 

 

 

 (3)Dubbo的RPC生效服務消費者成功訪問服務提供者的服務

 

 

四、FAQ問題集錦

1、在cmd裡執行“mvn clean install”命令後提示“mvn為不識別批處理名令”?

原因:未安裝maven工具或未給maven工具進行環境變數配置

解決方法:在環境變數->系統變數->Path->新增maven的安裝bin路徑,例:D:/maven/bin。最後重新開啟cmd即可

 

2、啟動tomcat執行dubbo-admin專案時,tomcat日誌提示“zookeeper至今未連線”錯誤?

 

 解決:把dubbo關掉,重新啟動ZK再重新啟動dubbo服務