news 2026/6/15 2:00:21

关于dubbo这个技术栈

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于dubbo这个技术栈

来研究一下dubbo,看一下对于dubbo我们需要掌握什么。

1.对于最主要的功能了解阶段,它是干啥的:

所谓的dubbo,给她做一个定义,就是,它是一个依赖,让几个springboot之间的通讯,可以配置一下,不在使用http协议,去进行交互。而是使用dubbo自带的协议。http协议就是,建立tcp连接,然后http请求包,发送,发送完以后断了。而dubbo就是,一直连接着tcp请求,然后一直发送http请求包。

2.对于内部拓扑结构的把握

这里主体,所谓的dubbo就是一个依赖,作用于两个客体,一个是springboot,一个是注册中心。
只要在springboot上配置好了,
就可以,轻松使用另一个springboot里面的service。

3.对于技术栈配置与使用阶段

对于注册中心的操作

对于一个springboot的配置(生产者+消费者)

3.对于dubbo的消费的一个最小的demo

4.对于dubbo生产级配置。

你的总结很不错!Dubbo 的核心理解确实如此。我们来系统化地整理一下 Dubbo 需要掌握的知识点,以便于学习和面试。


一、Dubbo 是什么(核心定义)

Apache Dubbo是一款高性能、轻量级的Java RPC 框架,主要用于解决分布式系统中服务之间的通信问题。

关键点

  • RPC(Remote Procedure Call):让远程调用像本地调用一样简单透明。
  • 通信方式:它不仅仅“替换 HTTP”,而是提供了一套基于 TCP 的私有协议(Dubbo 协议),相比 HTTP 有更好的性能(长连接、二进制编码、更少的头部开销)。
  • 核心功能:服务治理、负载均衡、服务降级、流量控制等。

与你的理解的补充
你提到的“一直连接着 TCP 请求”是对的,这是连接复用,避免了 HTTP 的“三次握手”开销。但传输的并不是“HTTP 请求包”,而是Dubbo 自定义的二进制协议帧


二、核心架构与角色(拓扑结构)

Dubbo 经典架构包含三种角色:

  1. Provider(服务提供者):暴露服务的 Spring Boot 应用。
  2. Consumer(服务消费者):调用远程服务的 Spring Boot 应用。
  3. Registry(注册中心):服务的注册与发现中心。常用:Zookeeper、Nacos、Redis。

工作流程

  1. Provider 启动,向 Registry 注册自己提供的服务。
  2. Consumer 启动,向 Registry 订阅所需服务,并获取 Provider 地址列表。
  3. Consumer 根据负载均衡策略,选择一个 Provider 进行RPC 调用
  4. 监控中心(可选)会统计调用次数和调用时间。

三、技术栈配置与使用(核心技能)

1. 注册中心配置(以 Nacos 为例)

依赖

<dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-registry-nacos</artifactId><version>${dubbo.version}</version></dependency>

配置(application.yaml):

dubbo:registry:address:nacos://localhost:8848

2. 服务提供者(Provider)配置

步骤

  1. 定义服务接口(API 模块,需共享给消费者):
    packagecom.example.api;publicinterfaceUserService{UsergetUser(Longid);}
  2. 实现接口(Provider 模块):
    @DubboService// 关键注解,声明暴露 Dubbo 服务publicclassUserServiceImplimplementsUserService{// 实现方法}
  3. 配置(application.yaml):
    dubbo:application:name:user-service-providerprotocol:name:dubboport:20880# Dubbo 协议端口scan:base-packages:com.example.provider.service# 扫描 DubboService
  4. 启动 Spring Boot 应用。

3. 服务消费者(Consumer)配置

步骤

  1. 引入相同的 API 接口 Jar 包
  2. 注入并调用远程服务
    @RestControllerpublicclassOrderController{@DubboReference// 关键注解,引用远程服务privateUserServiceuserService;@GetMapping("/order")publicOrdergetOrder(){Useruser=userService.getUser(123L);// 像调用本地方法一样// ... 业务逻辑}}
  3. 配置(application.yaml):
    dubbo:application:name:order-service-consumerregistry:address:nacos://localhost:8848
  4. 启动 Spring Boot 应用并访问接口,即完成远程调用。

四、生产级配置要点

  1. 负载均衡

    @DubboReference(loadbalance = "roundrobin") // 轮询

    策略:random(默认)、roundrobinleastactiveconsistenthash

  2. 集群容错

    @DubboReference(cluster = "failover")

    模式:failover(失败重试,默认)、failfast(快速失败)、failsafe(安全失败)、failback(自动恢复)、forking(并行调用)。

  3. 超时与重试

    @DubboReference(timeout = 3000,retries = 2)
    • timeout:调用超时时间(毫秒)。
    • retries:失败重试次数(不含第一次)。
  4. 服务降级

    • 通过mock属性实现。当服务不可用时,返回一个本地 Mock 数据,保证主流程可用。
    @DubboReference(mock="com.example.service.UserServiceMock")
  5. 多版本与分组

    • 版本:用于灰度发布、接口不兼容升级。
    • 分组:用于服务隔离(如:测试环境、生产环境)。
    @DubboReference(version="2.0.0",group="test")
  6. 线程模型与协议优化

    • 调整 Dubbo 协议端口、线程池大小等。
    • 考虑使用tri协议(基于 gRPC,支持 HTTP/2),便于跨语言和穿透网关。

五、最小 Demo 思路

  1. 创建一个Maven 父工程
  2. 创建api 子模块:定义UserService接口。
  3. 创建provider 子模块
    • 依赖 api 模块。
    • 实现UserServiceImpl,使用@DubboService
    • 配置注册中心(如 Nacos)和 Dubbo 协议。
  4. 创建consumer 子模块
    • 依赖 api 模块。
    • 在 Controller 中使用@DubboReference注入UserService
    • 配置注册中心。
  5. 启动Nacos
  6. 依次启动providerconsumer
  7. 访问 consumer 的接口,验证调用成功。

总结:需要掌握的知识图谱

类别具体内容
核心概念RPC、服务治理、注册中心、Provider、Consumer
架构服务注册与发现流程、调用流程、集群容错模式
配置开发@DubboService@DubboReference、配置文件
高级特性负载均衡、服务降级、多版本/分组、超时重试
生产实践线程模型优化、监控(Dubbo Admin)、链路追踪集成
源码理解SPI 机制(Dubbo 扩展的基石)、服务暴露与引用流程

从你已有的理解出发,按照这个脉络去深入学习和实践,就能系统性地掌握 Dubbo。建议在理解基本配置后,动手搭建一个完整的 Dubbo 微服务 demo,并尝试配置不同的负载均衡、容错策略,观察其效果。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 21:56:22

智优影入门指南:小白也能轻松剪出专业视频

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式新手教程&#xff0c;引导用户逐步学习智优影的基本功能。包括&#xff1a;界面介绍、素材导入、简单剪辑、添加字幕和特效、导出视频等。每个步骤提供实时反馈和错…

作者头像 李华
网站建设 2026/6/10 12:31:28

RISC-V指令集学习路线图:从寄存器到简单程序

从零开始掌握 RISC-V&#xff1a;寄存器、指令与第一个汇编程序你是否曾好奇&#xff0c;一行代码是如何在芯片上真正“跑起来”的&#xff1f;当我们在高级语言中写下a b&#xff0c;背后其实是处理器一条条指令在操控着数据的流动。而要揭开这层神秘面纱&#xff0c;最好的起…

作者头像 李华
网站建设 2026/6/14 7:58:36

简述C盘空间不足的常见原因(系统文件、临时文件、软件缓存等)

引言简述C盘空间不足的常见原因&#xff08;系统文件、临时文件、软件缓存等&#xff09;强调定期清理的重要性&#xff08;提升系统性能、避免卡顿&#xff09;基础清理方法磁盘清理工具使用通过Windows内置工具删除临时文件、系统日志操作路径&#xff1a;右键C盘属性→磁盘清…

作者头像 李华
网站建设 2026/6/14 22:19:09

终极编码转换指南:3步彻底解决跨平台文件乱码问题

终极编码转换指南&#xff1a;3步彻底解决跨平台文件乱码问题 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 还在为Windows系统创建的文档在Mac或Linux上打开时变成乱码而烦恼吗&…

作者头像 李华
网站建设 2026/6/14 8:46:56

Steam创意工坊模组一键下载指南:跨平台高效获取全攻略

Steam创意工坊模组一键下载指南&#xff1a;跨平台高效获取全攻略 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为不同游戏平台的模组兼容性问题而烦恼吗&#xff1f;Wor…

作者头像 李华
网站建设 2026/6/10 12:33:26

零基础学MODBUS TCP:30分钟搭建第一个通信程序

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个最简单的MODBUS TCP入门示例&#xff0c;要求&#xff1a;1. 使用Python实现基础通信 2. 包含详细的代码注释 3. 提供模拟测试设备 4. 分步骤教学文档 5. 常见问题解答。避…

作者头像 李华