Spring Cloud微服务之间调用Dubbo的详细过程
Spring Cloud Alibaba Dubbo 是阿里巴巴开源的 Dubbo 微服务框架 与 Spring Cloud 生态 的深度集成方案。它将 Dubbo 的高性能 RPC 能力与 Spring Cloud 的微服务治理、配置管理和服务注册发现功能有机结合,帮助开发者快速构建可扩展、可维护的微服务系统。
核心特点
- 高性能 RPC 调用
- 基于 Dubbo 的高效远程调用框架,实现服务间低延迟、高吞吐量的通信,支持多种协议(如 Dubbo、REST、gRPC 等)和序列化方式。
- 无缝集成 Spring Cloud
- Spring Cloud Alibaba Dubbo 提供自动化配置,能够与 Spring Cloud 的服务注册中心(如 Nacos、Zookeeper)、配置中心、负载均衡和熔断机制无缝配合。
- 服务治理能力
- 支持服务注册与发现、动态配置、服务分组、版本控制、路由规则和服务降级,为微服务的稳定运行提供全面保障。
- 注解驱动开发
- 提供注解如
@DubboService和@DubboReference,简化服务提供者和消费者的开发流程,降低 RPC 调用的复杂度。
- 提供注解如
- 灵活的配置管理
- 与 Nacos 等配置中心集成,实现服务参数动态化管理,可根据不同环境动态切换配置,提升系统灵活性和可维护性。
适用场景
- 构建大规模、高并发的企业微服务系统
- 多语言服务调用和跨服务通信场景
- 需要高性能 RPC 支持和服务治理能力的微服务架构
一、项目结构
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>
<!-- 只放接口,不依赖任何实现 -->
</dependencies>
</project>UserService.java
package com.example.api;
public interface UserService {
String getUserName(Long id);
}四、Provider 服务端
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 应用名,用于标识当前服务(生产者)
server:
port: 8080 # HTTP 服务端口(如果有 REST 接口)
dubbo:
application:
name: ${spring.application.name} # Dubbo 应用名,与 Spring Boot 名一致
protocol:
name: dubbo # Dubbo 协议
port: 20880 # Dubbo 服务端口,生产环境建议固定端口
registry:
address: nacos://127.0.0.1:8848 # 注册中心地址
provider:
timeout: 5000 # 默认超时时间(毫秒)
retries: 0 # 默认不重试,生产环境可根据业务调整四、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 应用名,用于标识消费者
server:
port: 8081 # HTTP 服务端口(如果有 REST 接口)
dubbo:
application:
name: ${spring.application.name} # Dubbo 应用名
registry:
address: nacos://127.0.0.1:8848 # 注册中心地址
consumer:
check: false # 启动时不检查服务提供者是否存在(开发环境用)
timeout: 5000 # 调用超时时间(毫秒)
retries: 2 # 调用失败重试次数
loadbalance: roundrobin # 负载均衡策略:轮询到此这篇关于Spring Cloud微服务之间调用Dubbo的文章就介绍到这了,更多相关Spring Cloud微服务调用Dubbo内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringMVC4.3解析器HandlerMethodArgumentResolver接口源码
这篇文章主要为大家介绍了SpringMVC4.3解析器HandlerMethodArgumentResolver接口源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-09-09
SpringData JPA中查询接口Repository的使用
本文主要介绍了SpringData JPA中查询接口Repository的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-07-07
Java日期时间处理问题(从Date、Calendar到SimpleDateFormat)
这篇文章主要介绍了Java日期时间处理深度解析(从Date、Calendar到SimpleDateFormat),我们详细讨论了Java中的日期和时间处理,包括Date、Calendar和SimpleDateFormat类的使用,以及Java 8引入的新的日期时间API的优势,需要的朋友可以参考下2024-08-08


最新评论