SpringBoot2.0完美整合Dubbo
2019已經到了,希望我跟大家一樣有一個新的開始,18年有再多的煩惱和不堪,那只是過去,接下來走好腳下的路就行了。
現在微服務越來越普遍,基本現在的新項目基本都是採用微服務的方式,這裡我們暫不討論微服務的好處什麼的,我們常見的微服務架構就是SpirngCloud,它整合了各種組件,讓我們的開發確實變得非常的方便,除了SpringCloud之外,其實還有另外的一種架構風格,SpringBoot + Dubbo,那麼我們今天就來說一下,SpringBoot如何集成Dubbo做微服務架構。
項目結構
我們想要開發一個完善的微服務架構,那麼做好各模塊之間的依賴關係是至為重要的,那麼我們先來看下我們的項目結構。
我們構建這個項目其實主要是模擬這樣一個流程,在訂單模塊去調用會員模塊的介面。這裡我就不說如何去安裝zookeeper和Dubbo了,這個東西一百度一大把,如果實在有問題的話,底部留言吧,我看到會回復的。(建議大家盡量在Linux環境下去安裝)
構建項目
接下來我們首先構建我們的父項目(springboot2.0-dubbo-parent),看需要引入哪些maven坐標。以下就是我們SpringBoot2.0整合Dubbo所需要的一些maven坐標,這裡我並沒有將整個pom文件放上來,主要太長,看著不方便,我已經把這個上傳到了github上,下文有地址,可以點進去看。
<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坐標需要引入。
再下來構建會員介面模塊(springboot2.0-dubbo-public-api-member-service),該模塊是介面管理模塊的子模塊,這個模塊中也沒有什麼需要特別需要引入的maven坐標。
然後我們就是來創建會員模塊的實現模塊(springboot2.0-dubbo-public-api-member-service-impl)了,這個模塊是父項目下的一個模塊,並不是存在於介面管理模塊下的,不清楚可以看看上面的項目結構圖。這個模塊中需要引入一個maven坐標,因為他要去實現會員模塊定義的介面,那麼就必須把會員模塊引入進來。
<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>複製代碼
項目完善
到這裡我們整個模塊算是創建完了,我們剩下的就是去完善我們的項目。訂單模塊要調用會員模塊的介面,那麼我們首先應該在會員的介面模塊創建一個介面。
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
作者:一個程序員的成長
原文:https://my.oschina.net/u/3178270/blog/2995712
※HAProxy、Keepalived 在 Ocatvia 的應用實現與分析
※Flutter 通過API獲取網路數據並解析
TAG:程序員小新人學習 |