Spring Cloud Alibaba為分布式應用程序開發提供了一站式解決方案。 它包含開發分布式應用程序所需的所有組件,使您可以輕松地使用Spring Cloud開發應用程序。Dubbo是Alibaba 推出的一款高性能 RPC 框架,通過 Spring Cloud Alibaba 可以方便的與 Spring Cloud 繼承提供更加強大的服務治理能力。
1. 下載 nacos 並啟動
Nacos作為服務注冊中心,提供注冊發現能力。下載完成之后解壓並啟動。
sh startup.sh -m standalone # 單機模式啟動
啟動完成之后打開控制台頁面,默認賬號密碼:nacos/nacos
2. 創建父工程
通過 IDEA 創建父工程,maven 項目類型選擇 pom,並添加一下依賴
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR3</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.1.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
3. 創建 sample-api
添加接口
public interface EchoService {
String echo(String message);
}
4. 創建 server 工程
添加依賴
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>sample-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
創建啟動類
@SpringBootApplication
@EnableDiscoveryClient
@EnableDubbo(scanBasePackages = {"com.example.server.service"})
public class ServerApp {
public static void main(String[] args) {
SpringApplication.run(ServerApp.class, args);
}
}
配置文件
dubbo:
protocol:
# dubbo 協議
name: dubbo
# dubbo 協議端口( -1 表示自增端口,從 20880 開始)
port: -1
registry:
# 掛載到 Spring Cloud 注冊中心
address: spring-cloud://localhost
application:
name: ${spring.application.name}
id: ${spring.application.name}
provider:
scope: remote
spring:
application:
# Dubbo 應用名稱
name: server
main:
# Spring Boot 2.1 需要設定
allow-bean-definition-overriding: true
cloud:
nacos:
# Nacos 服務發現與注冊配置
discovery:
server-addr: 127.0.0.1:8848
啟動服務端,觀察 Nacos 頁面是否注冊成功,接下來創建消費端
5. 創建 client 工程
添加依賴
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>sample-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-actuator</artifactId>
</dependency>
<!-- Dubbo Spring Cloud Starter -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<!-- Spring Cloud Nacos Service Discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
創建啟動類
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class ClientApp {
@Reference
private EchoService echoService;
@GetMapping("/echo")
public String echo(String message) {
return echoService.echo(message);
}
public static void main(String[] args) {
SpringApplication.run(ClientApp.class, args);
}
}
配置文件
dubbo:
registry:
# 掛載到 Spring Cloud 注冊中心
address: spring-cloud://localhost
cloud:
subscribed-services: server
application:
name: ${spring.application.name}
id: ${spring.application.name}
spring:
application:
# Dubbo 應用名稱
name: client
main:
# Spring Boot 2.1 需要設定
allow-bean-definition-overriding: true
cloud:
nacos:
# Nacos 服務發現與注冊配置
discovery:
server-addr: 127.0.0.1:8848
啟動消費端,觀察 Nacos 頁面是否注冊成功。
6. 測試
測試接口響應
curl http://localhost:8080/echo?message=bro
返回內容如下
[echo] Hello, bro
基於 Dubbo 的 RPC 調用成功。