本文介紹這兩天使用springboot搭建dubbo的過程和遇到的問題
一、配置zookeeper註冊中心
1.下載zookeeper註冊中心服務(我使用的是3.4.10)
2.解壓下載的壓縮包到本地
3.進入conf文件,將zoo_sample.cfg複製一份,並且改名爲zoo.cfg
4.進入bin目錄,在文件頭部的地址欄輸入cmd,通過命令進入bin目錄
5.在打開的命令窗口輸入zkServer.cmd,回車運行zookeeper服務
二、配置dubbo監控中心
1.下載監控中心源碼(裏邊有配置demo)
https://github.com/alibaba/dubbo(dubbo-admin是監控中心,用戶密碼都是root)
2.將下載的壓縮包解壓到本地,並通過編輯工具將dubbo-admin編譯,部署到本地Tomcat
3.運行dubbo監控中心(可看到沒有任何提供者)
三、項目接口說明(IED:eclipse)
四、創建服務提供者(Provider)
1.創建一個provider的maven工程
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)
d) 添加接口實現類,接口暴露的具體實現方法(ProviderImpl.java)
4.啓動接口,查看dubbo監控中心(提供者已經配置完成)
五、創建服務消費者(Consumer)
1.創建consumer消費者工程
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)
5.運行結果,監控查看
可看到上邊的dubbo監控中心已經有了一個消費者,整個過程配置完成
附一、Api接口工程
1.項目結構
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代碼)
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只能基於接口暴露,不能暴露普通實現類