Spring Cloud微服务之间调用Dubbo

Spring Cloud Alibaba Dubbo 是阿里巴巴开源的 Dubbo 微服务框架Spring Cloud 生态 的深度集成方案。它将 Dubbo 的高性能 RPC 能力与 Spring Cloud 的微服务治理、配置管理和服务注册发现功能有机结合,帮助开发者快速构建可扩展、可维护的微服务系统。

核心特点
  1. 高性能 RPC 调用

    基于 Dubbo 的高效远程调用框架,实现服务间低延迟、高吞吐量的通信,支持多种协议(如 Dubbo、REST、gRPC 等)和序列化方式。

  2. 无缝集成 Spring Cloud

    Spring Cloud Alibaba Dubbo 提供自动化配置,能够与 Spring Cloud 的服务注册中心(如 Nacos、Zookeeper)、配置中心、负载均衡和熔断机制无缝配合。

  3. 服务治理能力

    支持服务注册与发现、动态配置、服务分组、版本控制、路由规则和服务降级,为微服务的稳定运行提供全面保障。

  4. 注解驱动开发

    提供注解如 @DubboService@DubboReference,简化服务提供者和消费者的开发流程,降低 RPC 调用的复杂度。

  5. 灵活的配置管理

    与 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

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

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

java 复制代码
package com.example.api;

public interface UserService {

    String getUserName(Long id);

}

四、Provider 服务端

dubbo-provider/pom.xml

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

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

bash 复制代码
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

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

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

bash 复制代码
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  # 负载均衡策略:轮询
相关推荐
阿里云云原生1 天前
阿里云微服务引擎 MSE 及 API 网关 2026 年 5 月产品动态
微服务
JAVA社区1 天前
Java高级全套教程(十三)—— 分布式锁超详细实战详解(原理+三种方案企业级落地)
java·开发语言·分布式·spring cloud·面试·java-zookeeper
Devin~Y2 天前
智慧物流+AIGC客服Java大厂面试:Spring Boot、Kafka、Redis、JVM与RAG Agent实战
java·jvm·spring boot·redis·spring cloud·kafka·rag
worilb2 天前
Spring Cloud 学习与实践(4):订单服务开发
spring cloud
Jempo M2 天前
小品文:服务器并发模型深度详解:事件驱动、多线程、Actor模型全维度对比与工程实践
服务器·微服务
IronMurphy2 天前
微服务拷打最后一讲!!!
java·微服务·架构
qq_382949222 天前
推荐:《Spring Cloud Alibaba 微服务架构实战课》—— 从零到一构建企业级微服务系统
微服务·云原生·架构
JAVA社区2 天前
Java高级全套教程(十一)—— Kubernetes 超详细企业级实战详解
java·运维·微服务·容器·面试·kubernetes
weixin_397574092 天前
AI Agent三层架构设计原理
人工智能·dubbo
qq_382949223 天前
推荐一门不错的微服务实战课:Spring Cloud Alibaba 从入门到落地
微服务·云原生·架构