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  # 负载均衡策略:轮询
相关推荐
GlobalInfo5 小时前
2026年机器人多指灵巧手市场分析报告——涵盖行业调查、趋势分析与发展前景
大数据·人工智能·microsoft·微服务·机器人
每天一道题17 小时前
微服务为什么会变慢?从 QPS、P99 到 Trace 与性能瓶颈
微服务·云原生·架构
利威尔xu18 小时前
Go IM 源码实战(11):token 只是个 HASH,多端互踢的顺序错了就踢错人
后端·微服务·面试·架构·golang
百度一见18 小时前
百度朱名发:让现场治理标准与经验,成为持续进化的组织资产
dubbo
每天一道题20 小时前
微服务为什么会发生级联故障?从 Timeout、Retry 到熔断、限流与 Backpressure
微服务·云原生·架构
每天一道题1 天前
CAP、Raft 与多数派:分布式系统如何达成一致?
分布式·后端·微服务
火2252 天前
# C++ 微服务即时通讯系统(四):MySQL、Redis 与 Elasticsearch——数据分工与一致性
c++·mysql·微服务
我不会起名字3223 天前
服务注册了却调不通:注册中心与心跳的 3 个时间参数
微服务·nacos·注册中心·排查
知已难寻3 天前
第 5 篇 · 云原生生态与实践:微服务、DevOps、可观测性与 Serverless
大数据·linux·服务器·微服务·云原生·云计算·devops