Spring Cloud微服务之间调用Dubbo的详细过程

 更新时间:2026年02月13日 09:07:49   作者:Lucas-689  
SpringCloudAlibabaDubbo是阿里巴巴开源的Dubbo与SpringCloud的深度集成方案,本文介绍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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java ArrayList与LinkedList使用方法详解

    Java ArrayList与LinkedList使用方法详解

    Java中容器对象主要用来存储其他对象,根据实现原理不同,主要有3类常用的容器对象:ArrayList使用数组结构存储容器中的元素、LinkedList使用链表结构存储容器中的元素
    2022-11-11
  • springboot快速整合Mybatis组件的方法(推荐)

    springboot快速整合Mybatis组件的方法(推荐)

    Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。这篇文章主要介绍了springboot快速整合Mybatis组件的方法,需要的朋友可以参考下
    2019-11-11
  • Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码

    这篇文章主要介绍了Spring boot+mybatis+thymeleaf 实现登录注册增删改查功能的示例代码,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • springboot整合dubbo设置全局唯一ID进行日志追踪的示例代码

    springboot整合dubbo设置全局唯一ID进行日志追踪的示例代码

    这篇文章主要介绍了springboot整合dubbo设置全局唯一ID进行日志追踪,本文通过图文示例相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-10-10
  • Spring Cloud 2020.0.0正式发布再见了Netflix

    Spring Cloud 2020.0.0正式发布再见了Netflix

    这篇文章主要介绍了Spring Cloud 2020.0.0正式发布再见了Netflix,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • MyBatisPlus唯一索引批量新增或修改的实现方法

    MyBatisPlus唯一索引批量新增或修改的实现方法

    本文主要介绍了MyBatisPlus唯一索引批量新增或修改的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • 关于重写equals()方法和hashCode()方法及其简单的应用

    关于重写equals()方法和hashCode()方法及其简单的应用

    这篇文章主要介绍了关于重写equals()方法和hashCode()方法及其简单的应用,网上的知识有些可能是错误的,关于 equals() 方法的理解,大家讨论不一样,需要的朋友可以参考下
    2023-04-04
  • Java的泛型擦除和运行时泛型信息获取方式

    Java的泛型擦除和运行时泛型信息获取方式

    Java泛型在编译时会发生类型擦除,即泛型参数被替换为它们的限定类型(如Object),这使得ArrayList<Integer>和ArrayList<String>在运行时类型相同,尽管如此,我们可以通过定义类或匿名内部类的方式在运行时获取泛型信息
    2024-09-09
  • Java超详细梳理IO流的使用方法上

    Java超详细梳理IO流的使用方法上

    流(Stream)是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道,数据源发送的数据经过这个通道到达目的地,按流向区分为输入流和输出流
    2022-04-04
  • 2020JDK1.8安装教程详解(一次就可安装成功)

    2020JDK1.8安装教程详解(一次就可安装成功)

    这篇文章主要介绍了2020JDK1.8安装教程详解(一次就可安装成功),本文通过图文并茂的形式分步骤给大家讲解的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-08-08

最新评论