Spring Cloud Alibaba整合Apache-Dubbo微服務一、Dubbo的起源
大家使用Dubbo應該不陌生,在2012年就開源的一款分散式RPC框架,支援Redis、Zookeeper、Hessian、Memcache、Dubbo等微服務註冊中心。橫掃各大網際網路公司的分散式架構,佔據頭把交椅。
1.1中間插曲就在大家紛紛轉向Dubbo分散式架構的事後,突然Dubbo陷入了停滯,幾乎4年沒有更新。而此時Spring Cloud橫空出世,佔據了微服務的一席之地。
第一期Dubbo與Spring Cloud的對比:
1.2 Dubbo Spring Cloud破繭而出就在大家幾乎遺忘Dubbo的時候,阿里恢復了對Dubbo的更新,同時開源了Nacos註冊中心框架。
並且基於舊的Dubbo,推出了Dubbo Spring Cloud的生態圈,擴充套件了Spring Cloud的業務生態,也為Dubbo融入了SC系列。
新版的Dubbo Spring Cloud系列對比:
二、Dubbo Spring Cloud新特性功能[1]實現面向介面的高效能RPC呼叫;
[2]內建多種負載均衡策略,智慧感知下游節點健康狀況,實現智慧負載均衡系列;
[3]擴充套件支援多種註冊中心服務,比如Nacos、Zookeeper、Apollo;
[4]實現快速可擴充套件;
[5]透過配置不同的路由規則,輕鬆實現灰度釋出;
[6]提供豐富服務治理、運維工具:隨時查詢服務元資料、服務健康狀態及呼叫統計,實時下發路由策略、調整配置引數。
三、例項應用3.1構建服務介面public interface HelloService {
String hello(String name);
}
3.2提供對Dubbo和Nacos生態環境的依賴引入API工程:
<dependency>
<groupId>top.onething</groupId>
<artifactId>product-api</artifactId>
<version>1.0.1</version>
</dependency>
引入Nacos座標:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
構建Spring Boot:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
構建Nacos服務註冊中心:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
構建Spring Starter Dubbo引入Dubbo支援服務
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
3.3實現Spring Cloud Alibaba Dubbo 介面@Service
public class HelloServiceImpl implements HelloService {
@Override
public String hello(String name) {
return "huahuo " + name;
}
}
注意:@Service註解並不依賴於Spring,而是來自於org.apache.dubbo.config.annotation.Service,Dubbo協議自帶的
3.4實現Dubbo與Spring Cloud Alibaba Nacos的配置dubbo.protocol: 用來配置Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱,port 為特定協議埠。
dubbo.registry: Dubbo 服務註冊中心與配置中心配置,其中子屬性 address 的值 “spring-cloud://localhost”,說明掛載到 Spring Cloud 註冊中心
spring:
application:
name: dubbo-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.3.2:8848 # nacos對應微服務註冊微服務中心的地址
cluster-name: dubbo-cluster #叢集負載名稱
namespace: dd17-amp5-51cg-8a95-ff4aoooc273a #名稱空間
config:
server-addr: 192.168.3.2:8848 # nacos對應微服務配置中心地址
namespace: dd17-amp5-51cg-8a95-ff4aoooc273a #名稱空間
file-extension: yaml #字尾請求
refresh-enabled: true #自動重新整理
dubbo:
protocol: #Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱,port 為協議埠( -1 表示自增埠,從 20880 開始)
name: dubbo
port: -1 #dubbo服務協議預設開啟埠為20880,rmi協議服務預設開啟埠為1099,http和hessian協議突破預設埠為80;如果沒有配置port,則自動採用預設開啟埠,如果配置為-1,則會分配一個沒有被佔用的埠。分配的埠在協議預設埠的基礎上增長,確保埠段可使用
registry:
#dubbo服務註冊埠,註冊中心伺服器地址,如果地址沒有埠預設為9090,同一叢集內的多個地址用逗號分隔,如:ip:port,ip:port
#其中字首spring-cloud說明:掛載到 Spring Cloud註冊中心
address: spring-cloud://192.168.3.2:8848
cloud:
subscribed-services: dubbo-provider
consumer:
check: false
四、構建服務消費方引入第一步中構建的API包以及Spring Cloud Alibaba對Nacos和Dubbo的依賴
<dependency>
<groupId>top.onething</groupId>
<artifactId>product-api</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
4.1引入消費方服務配置spring:
application:
name: dubbo-consumer
cloud:
nacos:
discovery:
server-addr: 192.168.3.2:8848 # nacos對應微服務註冊微服務中心的地址
cluster-name: dubbo-cluster #叢集負載名稱
namespace: dd17-amp5-51cg-8a95-ff4aoooc273a #名稱空間
config:
server-addr: 192.168.3.2:8848 # nacos對應微服務配置中心地址
namespace: dd17-amp5-51cg-8a95-ff4aoooc273a #名稱空間
file-extension: yaml #字尾請求
refresh-enabled: true #自動重新整理
dubbo:
protocol: #Dubbo 服務暴露的協議配置,其中子屬性 name 為協議名稱,port 為協議埠( -1 表示自增埠,從 20880 開始)
name: dubbo
port: -1
registry:
#字首spring-cloud含義:實現掛載到 Spring Cloud註冊中心
address: spring-cloud://192.168.3.2:8848 #dubbo服務註冊埠,註冊中心伺服器地址,如果地址沒有埠預設為9090,同一叢集內的多個地址用逗號分隔,如:ip:port,ip:port
cloud:
subscribed-services: dubbo-provider
4.2消費方呼叫介面@EnableDiscoveryClient
@SpringBootApplication
@RestController
public class DubboConsumerApplication{
@Reference
HelloService helloService;
@GetMapping("/fenbu")
public String fenbu() {
return helloService.hello("www.baihe.cn");
}
}
@Reference註解來自org.apache.dubbo.config.annotation.Reference
本文講解了Dubbo阿里系微服務Spring Cloud Alibaba。透過Dubbo Spring Cloud,廣大程式設計師迎來了春天。後續繼續推出Spring Cloud Alibaba微服務與大資料系列,敬請期待。