SpringBoot2.0完美整合Dubbo

2019已經到了,但願我跟你們同樣有一個新的開始,18年有再多的煩惱和不堪,那只是過去,接下來走好腳下的路就好了。java



如今微服務愈來愈廣泛,基本如今的新項目基本都是採用微服務的方式,這裏咱們暫不討論微服務的好處什麼的,咱們常見的微服務架構就是SpirngCloud,它整合了各類組件,讓咱們的開發確實變得很是的方便,除了SpringCloud以外,其實還有另外的一種架構風格,SpringBoot + Dubbo,那麼咱們今天就來講一下,SpringBoot如何集成Dubbo作微服務架構。git


項目結構

咱們想要開發一個完善的微服務架構,那麼作好各模塊之間的依賴關係是至爲重要的,那麼咱們先來看下咱們的項目結構。github

咱們構建這個項目其實主要是模擬這樣一個流程,在訂單模塊去調用會員模塊的接口。這裏我就不說如何去安裝zookeeper和Dubbo了,這個東西一百度一大把,若是實在有問題的話,底部留言吧,我看到會回覆的。(建議你們儘可能在Linux環境下去安裝)web


構建項目

接下來咱們首先構建咱們的父項目(springboot2.0-dubbo-parent),看須要引入哪些maven座標。如下就是咱們SpringBoot2.0整合Dubbo所須要的一些maven座標,這裏我並無將整個pom文件放上來,主要太長,看着不方便,我已經把這個上傳到了github上,下文有地址,能夠點進去看。spring


<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.0.1.RELEASE</version>
 </parent>

 <!-- 編寫統一的版本控制 -->
 <properties>
   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
   <maven.compiler.source>1.8</maven.compiler.source>
   <maven.compiler.target>1.8</maven.compiler.target>
   <java-version>1.8</java-version>
   <curator-framework>4.0.1</curator-framework>
   <zookeeper.version>3.4.13</zookeeper.version>
   <dubbo.starter.version>0.2.0</dubbo.starter.version>
 </properties>

 <dependencies>

   <!-- SpringBoot 整合 Web組件 -->
   <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>${dubbo.starter.version}</version>
   </dependency>

   <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.11</version>
     <scope>test</scope>
   </dependency>
 </dependencies>複製代碼


接下來就是構建咱們接口管理模塊(springboot2.0-dubbo-public-api-service),全部模塊的接口定義必須放在該模塊下,這個模塊中沒有什麼特別的maven座標須要引入。api


再下來構建會員接口模塊(springboot2.0-dubbo-public-api-member-service),該模塊是接口管理模塊的子模塊,這個模塊中也沒有什麼須要特別須要引入的maven座標。springboot


而後咱們就是來建立會員模塊的實現模塊(springboot2.0-dubbo-public-api-member-service-impl)了,這個模塊是父項目下的一個模塊,並非存在於接口管理模塊下的,不清楚能夠看看上面的項目結構圖。這個模塊中須要引入一個maven座標,由於他要去實現會員模塊定義的接口,那麼就必須把會員模塊引入進來。bash


<dependency>
   <groupId>com.xiaotao</groupId>
   <artifactId>springboot2.0-dubbo-public-api-member-service</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>複製代碼


最後咱們再來構建訂單模塊的表現層(springboot2.0-dubbo-order-web),這個模塊中也是引入一個maven就好,由於它要去調用會員模塊的接口,因此咱們將會員模塊的maven引入進來。架構

<dependency>
   <groupId>com.xiaotao</groupId>
   <artifactId>springboot2.0-dubbo-public-api-member-service</artifactId>
   <version>1.0-SNAPSHOT</version>
</dependency>複製代碼


項目完善

到這裏咱們整個模塊算是建立完了,咱們剩下的就是去完善咱們的項目。訂單模塊要調用會員模塊的接口,那麼咱們首先應該在會員的接口模塊建立一個接口。app

public interface IMemberService {

   // 會員接口
   String getUser();
}複製代碼


會員接口的實現模塊實現該接口

@Service
public class MemberServiceImpl implements IMemberService {


   @Override
   public String getUser() {

       System.out.println("訂單服務調用會員服務");
       return "訂單服務調用會員服務";
   }
}複製代碼


注意:咱們以前採用@Service是將咱們的服務註冊到容器中,可是咱們如今使用的是Dubbo那麼咱們是將咱們的服務註冊到Dubbo中,因此你們這裏導包的時候必定要注意。


這個模塊是要啓動起來的,因此咱們還要寫咱們的啓動類

@EnableDubbo
@SpringBootApplication
public class AppMember {

   public static void main(String[] args) {
       SpringApplication.run(AppMember.class, args);
   }
}複製代碼


注意:@EnableDubbo這個註解是開啓Dubbo服務的,若是不加該註解,那麼該服務是註冊不到Dubbo中去的。


最後咱們須要配置咱們的dubbo,咱們的dubbo將服務註冊到哪裏這些咱們尚未進行配置,咱們在springboot的resources下的application.yml中進行配置,具體配置以下

server:
 port: 9002

dubbo:
 application:
 ###########註冊到註冊中心的名稱############
   name: member
 ###########採用協議和端口號################
 protocol:
 ###########採用dubbo協議####################
   name: dubbo
 ###########發佈dubbo端口號爲20880###########
   port: 20881
 registry:
 ###########註冊中心地址#####################
   address: zookeeper://192.168.50.128:2181

spring:
 output:
   ansi:
     enabled: always複製代碼


到這裏咱們訂單這個模塊就算搞定了,將會員實現這個模塊啓動起來,而後訪問Dubbo地址(http://192.168.50.128:8080/dubbo-admin-2.6.0/),這裏是個人地址,你要訪問你的地址。


咱們經過控制檯能夠看到Dubbo服務已經註冊進去了。

咱們再來看看Dubbo控制面板,能夠看到這個服務的確已經註冊進來了。


最後咱們來講下,咱們若是在訂單模塊去進行調用。首先咱們在訂單模塊寫一個接口去調用咱們會員模塊的接口。

@RestController
public class OrderController {

   @Reference
   private IMemberService memberService;

   @GetMapping("/orderToMember")
   public String orderToMember() {

       String user = memberService.getUser();

       System.out.println(user);

       return user;
   }
}複製代碼


注意:@Reference 這個註解其實跟咱們以前使用的@Autowired實際上是同樣的意思,可是咱們以前將服務註冊到了Dubbo中,因此咱們須要從Dubbo中去取這個服務,因此就必須使用這個註解。


啓動類

@SpringBootApplication
@EnableDubbo
public class AppOrder {

   public static void main(String[] args) {
       SpringApplication.run(AppOrder.class, args);
   }
}複製代碼


最後一步在配置下application.yml

server:
 port: 8001

dubbo:
 application:
 ##### 註冊服務的名稱
   name: order
 ##### 註冊中心地址
 registry:
   address: zookeeper://192.168.50.128:2181
 ##### 調用服務超時時間
 consumer:
   timeout: 5000

spring:
 output:
   ansi:
     enabled: always複製代碼


到這裏咱們整個項目就寫完了,那麼最後咱們啓動訂單模塊,看看是否調用成功。

最後經過測試咱們能夠發現,是沒有問題的。咱們再看看Dubbo的控制面板是否有消費者。

最後發現確實是有一個消費者的。


到這裏咱們SpringBoot2.0整合Dubbo就已經完成了。


項目地址:https://github.com/liangbintao/springboot2.0-dubbo

相關文章
相關標籤/搜索