1. 程式人生 > >Spring Boot 整合 Dubbo和Zookeeper

Spring Boot 整合 Dubbo和Zookeeper

prop pre mode epo con implement 應用 del www.

Spring Boot 整合 Dubbo和Zookeeper

  • Spring Boot 整合 Dubbo和Zookeeper
    • 環境介紹
    • Zookeeper 安裝
      • 啟動
    • Dubbo admin 搭建
    • 創建主maven項目
      • 創建子spring boot項目

環境介紹

  • zookeeper 安裝
  • dubbo-admin 查看管理註冊中心服務提供者和消費者

Zookeeper 安裝

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

下載最新安裝包,文件格式是tar.gz,可見Apache還是推薦在Linux上使用,但也提供了在windows上使用的腳本。
解壓之後,修改數據和日誌配置,註意在3.5.3版本上,conf文件夾裏不在直接提供zoo.cfg,而是提供了一個example,zoo_sample.cfg。復制重命名為zoo.cfg,然後修改data位置新增log位置。註意,windows目錄要用//分割。

dataDir=D:\\software\\zookeeper-3.5.3-beta\\zookeeper\\data
dataLogDir=D:\\software\\zookeeper-3.5.3-beta\\zookeeper\\log
  • 修改zkEnv.cmd
    防止win10 閃退,註意雙引號的位置
if not exist "%JAVA_HOME%\bin\Java.exe"

set JAVA="%JAVA_HOME%\bin\java"

啟動

使用zkServer.cmd啟動Zookeeper即可。註意Zookeeper是運行在8080端口,服務接口是2181

Dubbo admin 搭建

https://github.com/alibaba/dubbo

https://github.com/dangdangdotcom/dubbox

下載dubbo,執行

mvn install -D maven.test.skip=true

然後在dubbo-admin下執行

mvn package -D maven.skip.test=true

打war包,發布到tomcat下,註意修改tomcat端口8081

創建主maven項目

技術分享圖片

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>

    <groupId>com.rencc.dubbo</groupId>
    <artifactId>dubbo-spring-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>dubbo-provider</module>
        <module>dubbo-consumer</module>
    </modules>

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

</project>

創建子spring boot項目

  • dubbo-provider 服務提供者

在application.properties 裏設置端口,目前8080和8081已被使用

server.port=8090

添加dubbo的配置文件

<?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">

    <!-- 配置可參考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 服務提供方應用名,用於計算依賴關系 -->
    <dubbo:application name="dubbo-provider" owner="dubbo-provider" />

    <!-- 定義 zookeeper 註冊中心地址及協議 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" client="zkclient" />

    <!-- 定義 Dubbo 協議名稱及使用的端口,dubbo 協議缺省端口為 20880,如果配置為 -1 或者沒有配置 port,則會分配一個沒有被占用的端口 -->
    <dubbo:protocol name="dubbo" port="-1" />

    <!-- 聲明需要暴露的服務接口 -->
    <dubbo:service interface="com.rencc.dubbo.provider.service.DemoService"
        ref="demoService" timeout="10000" />

    <!-- 和本地 bean 一樣實現服務 -->
    <bean id="demoService" class="com.rencc.dubbo.provider.serviceImpl.DemoServiceImpl" />

</beans>

DemoService 接口和實現類

package com.rencc.dubbo.provider.service;

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





package com.rencc.dubbo.provider.serviceImpl;

import com.rencc.dubbo.provider.service.DemoService;

public class DemoServiceImpl implements DemoService {

    public String sayHello(String name) {
        return "Welcome to Dubbo, Hello " + name;
    }

}

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>

    <groupId>com.rencc.dubbo.provider</groupId>
    <artifactId>dubbo-provider</artifactId>
    <packaging>jar</packaging>

    <name>dubbo-provider</name>
    <description>Demo project for Spring Boot</description>

    <parent>  
        <groupId>com.rencc.dubbo</groupId>
        <artifactId>dubbo-spring-study</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </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>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>1.5.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <version>1.5.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.4.10</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>slf4j-log4j12</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

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

    </dependencies>

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


</project>
  • dubbo-consumer 服務消費者
    在此僅貼出dubbo代碼配置。
<?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">

    <!-- 配置可參考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 消費方應用名,用於計算依賴關系,不是匹配條件,不要與提供方一樣 -->
    <dubbo:application name="dubbo-consumer" owner="dubbo-consumer" />

    <!-- 定義 zookeeper 註冊中心地址及協議 -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" client="zkclient" />

    <!-- 生成遠程服務代理,可以和本地 bean 一樣使用 testService -->
    <dubbo:reference id="demoService" interface="com.rencc.dubbo.provider.service.DemoService" />

</beans>

Spring Boot 整合 Dubbo和Zookeeper