Springboot搭建dubbo(詳細,zookeeper使用windows版)

本文介紹這兩天使用springboot搭建dubbo的過程和遇到的問題


一、配置zookeeper註冊中心

1.下載zookeeper註冊中心服務(我使用的是3.4.10)

http://www.apache.org/dyn/closer.cgi/zookeeper/

2.解壓下載的壓縮包到本地

這裏寫圖片描述

3.進入conf文件,將zoo_sample.cfg複製一份,並且改名爲zoo.cfg

圖1

4.進入bin目錄,在文件頭部的地址欄輸入cmd,通過命令進入bin目錄

圖2

圖3

5.在打開的命令窗口輸入zkServer.cmd,回車運行zookeeper服務

圖5

二、配置dubbo監控中心

1.下載監控中心源碼(裏邊有配置demo)

https://github.com/alibaba/dubbo(dubbo-admin是監控中心,用戶密碼都是root)

2.將下載的壓縮包解壓到本地,並通過編輯工具將dubbo-admin編譯,部署到本地Tomcat

3.運行dubbo監控中心(可看到沒有任何提供者)

圖6

三、項目接口說明(IED:eclipse)

圖7

四、創建服務提供者(Provider)

1.創建一個provider的maven工程

圖8

2.修改pom文件(源碼如下)

<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>casom.springboot.dubbo.zookeeper</groupId>
    <artifactId>Provider</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Provider</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
    </parent>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <com.alibaba.dubbo.version>2.5.3</com.alibaba.dubbo.version>
        <org.apache.zookeeper.version>3.4.6</org.apache.zookeeper.version>
        <com.github.sgroschupf.zkclient.version>0.1</com.github.sgroschupf.zkclient.version>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>casom.springboot.dubbo.zookeeper</groupId>
            <artifactId>Utils</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>casom.springboot.dubbo.zookeeper</groupId>
            <artifactId>Api</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 使用dubbo-zookeeper的時候,千萬不要使用springboot的熱部署,會影響消費者解析接口 -->
<!--        <dependency> -->
<!--            <groupId>org.springframework.boot</groupId> -->
<!--            <artifactId>spring-boot-devtools</artifactId> -->
<!--        </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
<!--        <dependency> -->
<!--            <groupId>org.springframework.boot</groupId> -->
<!--            <artifactId>spring-boot-configuration-processor</artifactId> -->
<!--            <optional>true</optional> -->
<!--        </dependency> -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
            <version>${com.alibaba.dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${org.apache.zookeeper.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>${com.github.sgroschupf.zkclient.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3.添加dubbo配置

a) 添加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.application.name}" />
    <!-- 註冊中心暴露服務地址 -->
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    <!-- <dubbo:registry protocol="zookeeper" address="10.170.219.98:2181,10.173.55.173:2181" /> -->
    <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" client="zkclient"/>
    <!-- 暴露服務 -->
    <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" />
    <!-- 暴露的具體接口:如果@Service、@Component中沒有帶參數,那麼bean的id默認是類名首字母小寫 -->
    <dubbo:service ref="providerImpl" interface="casom.springboot.dubbo.zookeeper.Api.IProvider" retries="0" timeout="6000" />
</beans>

b) 添加dubbo.properties文件(配置基礎信息,地址、名稱、端口等)

#應用名稱
dubbo.application.name=renfng

#註冊中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181

#協議名稱
dubbo.protocol.name=dubbo

#協議端口
dubbo.protocol.port=20880

c) 添加springboot的啓動類,並掃描dubbo的配置(ProviderApplication.java)

圖9

d) 添加接口實現類,接口暴露的具體實現方法(ProviderImpl.java)

圖11

4.啓動接口,查看dubbo監控中心(提供者已經配置完成)

圖12

五、創建服務消費者(Consumer)

1.創建consumer消費者工程

圖13

2.修改pom文件

<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>casom.springboot.dubbo.zookeeper</groupId>
    <artifactId>Consumer</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Consumer</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <com.alibaba.dubbo.version>2.5.3</com.alibaba.dubbo.version>
        <org.apache.zookeeper.version>3.4.6</org.apache.zookeeper.version>
        <com.github.sgroschupf.zkclient.version>0.1</com.github.sgroschupf.zkclient.version>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>casom.springboot.dubbo.zookeeper</groupId>
            <artifactId>Utils</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>casom.springboot.dubbo.zookeeper</groupId>
            <artifactId>Api</artifactId>
            <version>1.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- 使用dubbo-zookeeper的時候,千萬不要使用springboot的熱部署,會影響消費者解析接口 -->
<!--        <dependency> -->
<!--            <groupId>org.springframework.boot</groupId> -->
<!--            <artifactId>spring-boot-devtools</artifactId> -->
<!--        </dependency> -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </dependency>
<!--        <dependency> -->
<!--            <groupId>org.springframework.boot</groupId> -->
<!--            <artifactId>spring-boot-configuration-processor</artifactId> -->
<!--            <optional>true</optional> -->
<!--        </dependency> -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
            <version>${com.alibaba.dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${org.apache.zookeeper.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>${com.github.sgroschupf.zkclient.version}</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

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.application.name}" /> -->
    <dubbo:application name="fanxiaoyan"/>
    <!-- 註冊中心暴露服務地址 -->
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181" client="zkclient"/>
<!--    <dubbo:registry protocol="${dubbo.registry.protocol}" address="${dubbo.registry.address}" client="zkclient"/> -->
    <!-- 暴露服務 -->
<!--    <dubbo:protocol name="${dubbo.protocol.name}" port="${dubbo.protocol.port}" /> -->
<!--    <dubbo:protocol name="dubbo" port="20881"/> -->
    <!-- 暴露的具體接口:如果@Service、@Component中沒有帶參數,那麼bean的id默認是類名首字母小寫 -->
    <dubbo:reference id="provider" interface="casom.springboot.dubbo.zookeeper.Api.IProvider" retries="0" timeout="6000" />
</beans>

4.添加消費者工程的測試類(TestConsumer.java)

圖14

5.運行結果,監控查看

圖15

圖16

可看到上邊的dubbo監控中心已經有了一個消費者,整個過程配置完成

附一、Api接口工程

1.項目結構

圖17

2.編輯pom.xml

<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>casom.springboot.dubbo.zookeeper</groupId>
    <artifactId>Api</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Api</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

3.編寫接口IProvider

package casom.springboot.dubbo.zookeeper.Api;
public interface IProvider {
    public String sayHello(String msg);
}

附二、Utils公共包工程(根據自己需求添加)

1.項目結構(該工程中無任何實際java代碼)

圖18

2.添加pom文件的配置,引入需要的依賴包

<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>casom.springboot.dubbo.zookeeper</groupId>
    <artifactId>Utils</artifactId>
    <version>1.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>Utils</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <!-- spring版本號 -->
        <spring.version>4.0.2.RELEASE</spring.version>
        <!-- mybatis版本號 -->
        <mybatis.version>3.2.6</mybatis.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

附三、注意事項

1.dubbo接口暴露需要依賴於接口文件包,如果接口中用到實體類,實體類需要一併> 打包,並且實體類需要實現Serializable接口

2.接口包不能有父類工程做依賴,如果含有父類工程需要將父類工程一併打包

3.配置dubbo的時候,pom文件中千萬不要使用springboot的熱啓動(spring->boot-devtools)

4.dubbo只能基於接口暴露,不能暴露普通實現類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章