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  # 负载均衡策略:轮询
相关推荐
云创智城-yuncitys4 小时前
[特殊字符]⚡ 停充一体化云平台:基于微服务架构的城市智慧停车+新能源充电解决方案
java·微服务·架构
麦聪聊数据21 小时前
QuickAPI 在系统数据 API 化中的架构选型与集成
数据库·sql·低代码·微服务·架构
indexsunny1 天前
互联网大厂Java面试实战:从Spring Boot到微服务架构的深度解析
java·spring boot·spring cloud·kafka·prometheus·security·microservices
老毛肚1 天前
八股微服务
微服务·云原生·架构
掘根1 天前
【微服务即时通讯】环境搭建10——Curl实现邮件通知服务
微服务·云原生·架构
海南java第二人1 天前
Cursor 高级实战:从 Spring Boot 到微服务,AI 驱动的全流程开发指南
人工智能·spring boot·微服务
隔壁小邓1 天前
SpringCloud微服务拆分原则
spring cloud·微服务·架构
七夜zippoe1 天前
OpenClaw Gateway 服务:启动、停止、监控
微服务·架构·gateway·监控·openclaw
会算数的⑨1 天前
演进——从查日志到 AI 自治,企业监控体系的变迁
人工智能·分布式·后端·微服务·云原生