最近項目上要對之前的老項目作分佈式的整改,所以我專門花了點時間研究下當前比較熱門的dubbo和springboot結合使用,之前使用過dubbo,可是沒有與springboot結合過,在網上查了點資料,感受要麼是springboot版本太低,要麼是dubbo版本太低,反正基本是千篇一概,查考價值不大。下面咱們就直入主題,看下springboot+dubbo的簡單使用:java
首先是新建三個項目:dubbo-common: 主要存放服務發佈的接口以及發佈和調用端的公共對象,dubbo-provider: 服務提供方 dubbo-consumer: 服務消費方。新建項目就不說了,直接上maven依賴,其中dubbo-provier和dubbo-consumer的依賴基本同樣git


<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>org.dubbo</groupId> <artifactId>dubbo-provider</artifactId> <version>0.0.1-SNAPSHOT</version> <!-- 引入springboot --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.20.0-GA</version> </dependency> <dependency> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> <version>3.2.5.Final</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</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.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- Spingboot的插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
你們從pom文件中能夠看到,個人項目使用的是springboot的2.0.4版本,dubbo使用的是2.6.2,重點是dubbo和springboot的結合包使用的是以下依賴:github
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.2.0</version>
</dependency>web
這個很重要,由於不一樣的dubbo和springboot的版本不同,可能要選擇的結合包也不同。這裏我只展現使用xml來實現簡單功能,首先咱們先來看xml配置使用:spring
第一:在公共模塊增長一個接口代碼,代碼略apache
第二:在提供方實現相應的接口,代碼沒有任何業務邏輯,只是演示用,json


1 package org.yongcheng.liuyang.service.impl; 2 3 import org.yongcheng.liuyang.service.TestService; 4 5 import com.alibaba.dubbo.config.annotation.Service; 6 7 //@Service(version = "1.0.0") 8 @org.springframework.stereotype.Service 9 public class TestServiceImpl implements TestService { 10 11 @Override 12 public String sayHello(String name) { 13 return name+"hello"; 14 } 15 }
第三:配置dubbo.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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方應用信息,用於計算依賴關係 --> <dubbo:application name="dubbo-provider" /> <dubbo:registry address="zookeeper://localhost:2181" /> <!-- 用dubbo協議在20880端口暴露服務 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 聲明須要暴露的服務接口 --> <dubbo:service interface="org.yongcheng.liuyang.service.TestService" ref="demoService" /> <!-- 和本地bean同樣實現服務 --> <bean id="demoService" class="org.yongcheng.liuyang.service.impl.TestServiceImpl" /> </beans>
第四:提供程序啓動類springboot


package org.yongcheng.liuyang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ImportResource("classpath:dubbo.xml") public class ProviderApp { public static void main(String[] args) throws Exception { SpringApplication.run(ProviderApp.class, args); } }
好了提供方的代碼完成,接下倆就是消費方的步驟:app
消費方的pom依賴和提供方基本同樣,直接複用,可是因爲消費方使用的是web工程,所以須要多一個依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
第一: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>org.yongcheng.liuyang</groupId> <artifactId>dubbo-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>com.alibaba</groupId> <artifactId>dubbo</artifactId> <version>2.6.2</version> <exclusions> <exclusion> <artifactId>spring</artifactId> <groupId>org.springframework</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.0</version> </dependency> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <version>3.20.0-GA</version> </dependency> <dependency> <groupId>org.jboss.netty</groupId> <artifactId>netty</artifactId> <version>3.2.5.Final</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.10</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.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <!-- Spingboot的插件 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
第二:簡單業務代碼實現:


package org.yongcheng.liuyang.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.yongcheng.liuyang.service.TestService; import com.alibaba.dubbo.config.annotation.Reference; @RestController @RequestMapping(produces="application/json;charset=UTF-8") public class IndexActroller { // @Reference(url="dubbo://localhost:20880") @Autowired private TestService testService; @GetMapping("/sayHello") public String sayHello(String name){ return testService.sayHello(name); } }
第三:配置dubbo.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://dubbo.apache.org/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"> <!-- 提供方應用信息,用於計算依賴關係 --> <dubbo:application name="dubbo-consumer" /> <dubbo:registry address="zookeeper://localhost:2181" /> <!-- 用dubbo協議在20880端口暴露服務 --> <dubbo:protocol name="dubbo" port="20880" /> <!-- 聲明須要暴露的服務接口 --> <dubbo:reference interface="org.yongcheng.liuyang.service.TestService" id="demoService" /> </beans>
第四:提供程序啓動類


package org.yongcheng.liuyang; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ImportResource; @SpringBootApplication @ImportResource("classpath:dubbo.xml") public class ConsumerApp { public static void main(String[] args) throws Exception { SpringApplication.run(ConsumerApp.class, args); } }
好了,這樣總體的發佈和調用代碼已經完畢,接下來先啓動提供方的代碼,而後在啓動調用方的程序,而後咱們在瀏覽器中輸入咱們的url進行驗證便可!
若是有朋友須要註解實現的代碼,請留言!!!