Spring Cloud Alibaba-在nacos環境下整合dubbo
技術標籤:SpringCloudSpringCloudalibaba微服務dubbonacos
echo編輯整理,歡迎轉載,轉載請宣告文章來源。歡迎新增echo微信(微訊號:t2421499075) 交流學習。
我們之前整合了fegin來呼叫相對應的服務,本章我們來整合dubbo。那有了fegin為什麼還要dubbo?這是本章的核心,本章不僅會講怎麼整合使用dubbo,同時也會講dubbo和fegin的區別
fegin和dubbo怎麼選
首先,不談技術的區別和具體作用,fegin和dubbo最大的區別就是:dubbo是alibaba的親兒子
為什麼要整合dubbo
dubbo按理來說,自己就是一個很好的微服務治理框架。既然SpringCloudAlibaba也是一套微服務治理方案,那這個時候使用dubbo是不是顯得有很多的重複?其實不然。在Spring Cloud Alibaba的整合之下,Dubbo使用者既可以享受到原本RPC帶來效能優勢,又可以更好的享受Spring Cloud的各種福利;而對於Spring Cloud使用者來說,在服務治理層面,又對了一個不錯的可選項。可以說這塊的整合是真正的讓這兩大使用者群體得到了很好的融合,起到了互相成就的作用。
整合dubbo,入門案例
利用Dubbo來實現服務提供方與服務消費方,這裡我們就需要建立對應的兩個專案,一個是服務提供者,一個是服務消費者。我們先來建立一個服務提供者。
- 建立一個簡單的SpringBoot服務,這裡SpringBoot的版本我選擇的:2.2.11.RELEASE
引入整合dubbo需要的依賴
- 1、spring-cloud-starter-dubbo
- 2、spring-cloud-starter-alibaba-nacos-discovery
我的server專案pom檔案如下
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
< groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.11.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.echo</groupId>
<artifactId>dubbo-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dubbo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-dubbo</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
編寫對應的配置
- nacos的配置
- dubbo自己的配置
server:
port: 10083
spring:
cloud:
nacos:
server-addr: 192.168.22.71:8848
application:
name: spring-cloud-dubbo-server
dubbo:
scan:
base-packages: com.echo.dubbo.server
protocol:
name: dubbo
port: -1
registry:
address: spring-cloud://localhost
- dubbo.scan.base-packages: 指定,提供服務的介面的包
- dubbo.protocol.name: Dubbo 為協議名稱
- dubbo.protocol.port: -1 表示自增埠,從 20880 開始
- dubbo.registry.address: 說明掛載到 Spring Cloud 註冊中心(也就是我們的nacos,可以直接使用nacos地址替換localhost)
新增nacos的服務註冊與發現註解
// 在啟動類上添加註解,提供者和消費者都需要
@EnableDiscoveryClient
編寫一個dubbo介面並實現
public interface TestService {
String test(String name);
}
// 注意該serveice為dubbo的註解,不是framework的,引入應該為import org.apache.dubbo.config.annotation.Service;
@Service
public class TestServiceImpl implements TestService {
@Override
public String test(String name) {
return "hello " + name;
}
}
到這裡我們的服務提供者就已經完成了,然後建立一個服務消費者來呼叫就好
建立一個消費者
消費者的建立和服務提供者,一樣。依賴上只是要去將服務提供者這個專案新增進去,其他的都一樣。關鍵是配置檔案
- application.yml配置檔案裡面,只是和服務提供者有一個地方不同,那就是去掉scan這一項dubbo.scan.base-packages。新增一個dubbo.cloud.subscribed-services: spring-cloud-dubbo-server(這個值就是我們服務提供者的專案註冊在nacos的名稱)
編寫一個測試類
import org.apache.dubbo.config.annotation.Reference;
@RestController
public class TestController {
@Reference
private TestService testService;
@GetMapping("/test")
public String test() {
return testService.test("echo");
}
}
到這裡為止,就已經完成了我們的大部分工作了,我們可以啟動nacos來驗證一下服務是否都能夠直接註冊上來。
成功之後我們就可以呼叫我們的測試介面了:
到這裡我們就已經完成了整合dubbo