Spring Cloud微服務(wù)之間調(diào)用Dubbo的詳細(xì)過(guò)程
Spring Cloud Alibaba Dubbo 是阿里巴巴開(kāi)源的 Dubbo 微服務(wù)框架 與 Spring Cloud 生態(tài) 的深度集成方案。它將 Dubbo 的高性能 RPC 能力與 Spring Cloud 的微服務(wù)治理、配置管理和服務(wù)注冊(cè)發(fā)現(xiàn)功能有機(jī)結(jié)合,幫助開(kāi)發(fā)者快速構(gòu)建可擴(kuò)展、可維護(hù)的微服務(wù)系統(tǒng)。
核心特點(diǎn)
- 高性能 RPC 調(diào)用
- 基于 Dubbo 的高效遠(yuǎn)程調(diào)用框架,實(shí)現(xiàn)服務(wù)間低延遲、高吞吐量的通信,支持多種協(xié)議(如 Dubbo、REST、gRPC 等)和序列化方式。
- 無(wú)縫集成 Spring Cloud
- Spring Cloud Alibaba Dubbo 提供自動(dòng)化配置,能夠與 Spring Cloud 的服務(wù)注冊(cè)中心(如 Nacos、Zookeeper)、配置中心、負(fù)載均衡和熔斷機(jī)制無(wú)縫配合。
- 服務(wù)治理能力
- 支持服務(wù)注冊(cè)與發(fā)現(xiàn)、動(dòng)態(tài)配置、服務(wù)分組、版本控制、路由規(guī)則和服務(wù)降級(jí),為微服務(wù)的穩(wěn)定運(yùn)行提供全面保障。
- 注解驅(qū)動(dòng)開(kāi)發(fā)
- 提供注解如
@DubboService和@DubboReference,簡(jiǎn)化服務(wù)提供者和消費(fèi)者的開(kāi)發(fā)流程,降低 RPC 調(diào)用的復(fù)雜度。
- 提供注解如
- 靈活的配置管理
- 與 Nacos 等配置中心集成,實(shí)現(xiàn)服務(wù)參數(shù)動(dòng)態(tài)化管理,可根據(jù)不同環(huán)境動(dòng)態(tài)切換配置,提升系統(tǒng)靈活性和可維護(hù)性。
適用場(chǎng)景
- 構(gòu)建大規(guī)模、高并發(fā)的企業(yè)微服務(wù)系統(tǒng)
- 多語(yǔ)言服務(wù)調(diào)用和跨服務(wù)通信場(chǎng)景
- 需要高性能 RPC 支持和服務(wù)治理能力的微服務(wù)架構(gòu)
一、項(xiàng)目結(jié)構(gòu)
dubbo-boot4-demo
├── pom.xml ← 父工程
├── dubbo-provider-api
│ └── pom.xml
│ └── src/main/java
│ └── com/example/api
│ └── UserService.java
├── dubbo-provider
│ └── pom.xml
│ └── src/main/java
│ └── com/example/provider
│ ├── ProviderApplication.java
│ └── service
│ └── UserServiceImpl.java
│ └── src/main/resources
│ └── application.yml
└── dubbo-consumer
└── pom.xml
└── src/main/java
└── com/example/consumer
├── ConsumerApplication.java
└── controller
└── UserController.java
└── src/main/resources
└── application.yml二、父工程 pom.xml
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>dubbo-boot4-demo</artifactId>
<version>1.0.0</version>
<packaging>pom</packaging>
<modules>
<module>dubbo-provider-api</module>
<module>dubbo-provider</module>
<module>dubbo-consumer</module>
</modules>
<properties>
<java.version>25</java.version>
<spring-boot.version>4.0.0</spring-boot.version>
<dubbo.version>3.3.2</dubbo.version>
<nacos.version>2.4.1</nacos.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- Spring Boot BOM -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Dubbo BOM -->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-bom</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>三、API 模塊(公共接口)
dubbo-provider-api/pom.xml
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>dubbo-boot4-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>dubbo-provider-api</artifactId>
<dependencies>
<!-- 只放接口,不依賴任何實(shí)現(xiàn) -->
</dependencies>
</project>UserService.java
package com.example.api;
public interface UserService {
String getUserName(Long id);
}四、Provider 服務(wù)端
dubbo-provider/pom.xml
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>dubbo-boot4-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>dubbo-provider</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-provider-api</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
</dependencies>
</project>UserServiceImpl.java
package com.example.provider.service;
import com.example.api.UserService;
import org.apache.dubbo.config.annotation.DubboService;
@DubboService
public class UserServiceImpl implements UserService {
@Override
public String getUserName(Long id) {
return "user-" + id;
}
}application.yml
spring:
application:
name: dubbo-provider # Spring Boot 應(yīng)用名,用于標(biāo)識(shí)當(dāng)前服務(wù)(生產(chǎn)者)
server:
port: 8080 # HTTP 服務(wù)端口(如果有 REST 接口)
dubbo:
application:
name: ${spring.application.name} # Dubbo 應(yīng)用名,與 Spring Boot 名一致
protocol:
name: dubbo # Dubbo 協(xié)議
port: 20880 # Dubbo 服務(wù)端口,生產(chǎn)環(huán)境建議固定端口
registry:
address: nacos://127.0.0.1:8848 # 注冊(cè)中心地址
provider:
timeout: 5000 # 默認(rèn)超時(shí)時(shí)間(毫秒)
retries: 0 # 默認(rèn)不重試,生產(chǎn)環(huán)境可根據(jù)業(yè)務(wù)調(diào)整四、Consumer 模塊
dubbo-consumer/pom.xml
<project>
<parent>
<groupId>com.example</groupId>
<artifactId>dubbo-boot4-demo</artifactId>
<version>1.0.0</version>
</parent>
<artifactId>dubbo-consumer</artifactId>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>dubbo-provider-api</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version}</version>
</dependency>
</dependencies>
</project>UserController.java
package com.example.consumer.controller;
import com.example.api.UserService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@DubboReference
private UserService userService;
@GetMapping("/user")
public String user() {
return userService.getUserName(1L);
}
}application.yml
spring:
application:
name: dubbo-consumer # Spring Boot 應(yīng)用名,用于標(biāo)識(shí)消費(fèi)者
server:
port: 8081 # HTTP 服務(wù)端口(如果有 REST 接口)
dubbo:
application:
name: ${spring.application.name} # Dubbo 應(yīng)用名
registry:
address: nacos://127.0.0.1:8848 # 注冊(cè)中心地址
consumer:
check: false # 啟動(dòng)時(shí)不檢查服務(wù)提供者是否存在(開(kāi)發(fā)環(huán)境用)
timeout: 5000 # 調(diào)用超時(shí)時(shí)間(毫秒)
retries: 2 # 調(diào)用失敗重試次數(shù)
loadbalance: roundrobin # 負(fù)載均衡策略:輪詢到此這篇關(guān)于Spring Cloud微服務(wù)之間調(diào)用Dubbo的文章就介紹到這了,更多相關(guān)Spring Cloud微服務(wù)調(diào)用Dubbo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java ArrayList與LinkedList使用方法詳解
Java中容器對(duì)象主要用來(lái)存儲(chǔ)其他對(duì)象,根據(jù)實(shí)現(xiàn)原理不同,主要有3類常用的容器對(duì)象:ArrayList使用數(shù)組結(jié)構(gòu)存儲(chǔ)容器中的元素、LinkedList使用鏈表結(jié)構(gòu)存儲(chǔ)容器中的元素2022-11-11
springboot快速整合Mybatis組件的方法(推薦)
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來(lái)簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開(kāi)發(fā)過(guò)程。這篇文章主要介紹了springboot快速整合Mybatis組件的方法,需要的朋友可以參考下2019-11-11
Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼
這篇文章主要介紹了Spring boot+mybatis+thymeleaf 實(shí)現(xiàn)登錄注冊(cè)增刪改查功能的示例代碼,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的示例代碼
這篇文章主要介紹了springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤,本文通過(guò)圖文示例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Spring Cloud 2020.0.0正式發(fā)布再見(jiàn)了Netflix
這篇文章主要介紹了Spring Cloud 2020.0.0正式發(fā)布再見(jiàn)了Netflix,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
MyBatisPlus唯一索引批量新增或修改的實(shí)現(xiàn)方法
本文主要介紹了MyBatisPlus唯一索引批量新增或修改的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
關(guān)于重寫equals()方法和hashCode()方法及其簡(jiǎn)單的應(yīng)用
這篇文章主要介紹了關(guān)于重寫equals()方法和hashCode()方法及其簡(jiǎn)單的應(yīng)用,網(wǎng)上的知識(shí)有些可能是錯(cuò)誤的,關(guān)于?equals()?方法的理解,大家討論不一樣,需要的朋友可以參考下2023-04-04
Java的泛型擦除和運(yùn)行時(shí)泛型信息獲取方式
Java泛型在編譯時(shí)會(huì)發(fā)生類型擦除,即泛型參數(shù)被替換為它們的限定類型(如Object),這使得ArrayList<Integer>和ArrayList<String>在運(yùn)行時(shí)類型相同,盡管如此,我們可以通過(guò)定義類或匿名內(nèi)部類的方式在運(yùn)行時(shí)獲取泛型信息2024-09-09

