来研究一下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 经典架构包含三种角色:
- Provider(服务提供者):暴露服务的 Spring Boot 应用。
- Consumer(服务消费者):调用远程服务的 Spring Boot 应用。
- Registry(注册中心):服务的注册与发现中心。常用:Zookeeper、Nacos、Redis。
工作流程:
- Provider 启动,向 Registry 注册自己提供的服务。
- Consumer 启动,向 Registry 订阅所需服务,并获取 Provider 地址列表。
- Consumer 根据负载均衡策略,选择一个 Provider 进行RPC 调用。
- 监控中心(可选)会统计调用次数和调用时间。
三、技术栈配置与使用(核心技能)
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:88482. 服务提供者(Provider)配置
步骤:
- 定义服务接口(API 模块,需共享给消费者):
packagecom.example.api;publicinterfaceUserService{UsergetUser(Longid);} - 实现接口(Provider 模块):
@DubboService// 关键注解,声明暴露 Dubbo 服务publicclassUserServiceImplimplementsUserService{// 实现方法} - 配置(
application.yaml):dubbo:application:name:user-service-providerprotocol:name:dubboport:20880# Dubbo 协议端口scan:base-packages:com.example.provider.service# 扫描 DubboService - 启动 Spring Boot 应用。
3. 服务消费者(Consumer)配置
步骤:
- 引入相同的 API 接口 Jar 包。
- 注入并调用远程服务:
@RestControllerpublicclassOrderController{@DubboReference// 关键注解,引用远程服务privateUserServiceuserService;@GetMapping("/order")publicOrdergetOrder(){Useruser=userService.getUser(123L);// 像调用本地方法一样// ... 业务逻辑}} - 配置(
application.yaml):dubbo:application:name:order-service-consumerregistry:address:nacos://localhost:8848 - 启动 Spring Boot 应用并访问接口,即完成远程调用。
四、生产级配置要点
负载均衡:
@DubboReference(loadbalance = "roundrobin") // 轮询策略:
random(默认)、roundrobin、leastactive、consistenthash。集群容错:
@DubboReference(cluster = "failover")模式:
failover(失败重试,默认)、failfast(快速失败)、failsafe(安全失败)、failback(自动恢复)、forking(并行调用)。超时与重试:
@DubboReference(timeout = 3000,retries = 2)timeout:调用超时时间(毫秒)。retries:失败重试次数(不含第一次)。
服务降级:
- 通过
mock属性实现。当服务不可用时,返回一个本地 Mock 数据,保证主流程可用。
@DubboReference(mock="com.example.service.UserServiceMock")- 通过
多版本与分组:
- 版本:用于灰度发布、接口不兼容升级。
- 分组:用于服务隔离(如:测试环境、生产环境)。
@DubboReference(version="2.0.0",group="test")线程模型与协议优化:
- 调整 Dubbo 协议端口、线程池大小等。
- 考虑使用
tri协议(基于 gRPC,支持 HTTP/2),便于跨语言和穿透网关。
五、最小 Demo 思路
- 创建一个Maven 父工程。
- 创建api 子模块:定义
UserService接口。 - 创建provider 子模块:
- 依赖 api 模块。
- 实现
UserServiceImpl,使用@DubboService。 - 配置注册中心(如 Nacos)和 Dubbo 协议。
- 创建consumer 子模块:
- 依赖 api 模块。
- 在 Controller 中使用
@DubboReference注入UserService。 - 配置注册中心。
- 启动Nacos。
- 依次启动provider和consumer。
- 访问 consumer 的接口,验证调用成功。
总结:需要掌握的知识图谱
| 类别 | 具体内容 |
|---|---|
| 核心概念 | RPC、服务治理、注册中心、Provider、Consumer |
| 架构 | 服务注册与发现流程、调用流程、集群容错模式 |
| 配置开发 | @DubboService、@DubboReference、配置文件 |
| 高级特性 | 负载均衡、服务降级、多版本/分组、超时重试 |
| 生产实践 | 线程模型优化、监控(Dubbo Admin)、链路追踪集成 |
| 源码理解 | SPI 机制(Dubbo 扩展的基石)、服务暴露与引用流程 |
从你已有的理解出发,按照这个脉络去深入学习和实践,就能系统性地掌握 Dubbo。建议在理解基本配置后,动手搭建一个完整的 Dubbo 微服务 demo,并尝试配置不同的负载均衡、容错策略,观察其效果。