Appearance
Dubbo基础使用
SpringCloud 和 Dubbo 的区别
SpringCloud 主要还是整体的生态比较丰富,但是网关还是使用的 Gateway 方式,然后 dubbo 主要还是聚焦于 通信方式,而且他的通信方式的 rpc 的方式,springcloud 是 http 的方式。
| 对比维度 | Spring Cloud | Dubbo |
|---|---|---|
| 技术定位 | 微服务全家桶 | 高性能 RPC 框架 |
| 服务通信 | HTTP 协议为主,兼容 gRPC 等 | 自定义二进制协议,支持多种 |
| 服务注册 | Eureka/Consul/Zookeeper 等 | Zookeeper/Nacos/Etcd/Redis 等 |
| 分布式能力 | 配置、网关、监控、熔断、链路追踪等全生命周期 | 主要聚焦通信调用和治理 |
| 适合场景 | 异构系统、云化、互联网、RESTful 微服务 | 高并发、内网 Java-to-Java 微服务 |
注解@DubboReference 使用
@DubboReference的本质是:
在 Consumer 中注入一个远程服务代理,所有参数都是在控制“怎么找服务、怎么调服务、调不到怎么办”。
基础版本
java
@DubboReference
private IRebateService rebateService;含义:
- 注入一个 Dubbo 远程服务代理
- 通过 注册中心 查找 provider
- 正常发起 RPC 调用
指定接口与版本(最常见)
java
@DubboReference(
interfaceClass = IRebateService.class,
version = "1.0"
)
private IRebateService rebateService;用途:
interfaceClass:明确接口(防止泛型 / 继承混乱)version:区分不同实现
关闭启动时校验(开发必用)
java
@DubboReference(
interfaceClass = IRebateService.class,
check = false
)
private IRebateService rebateService;作用:
- 启动时 不检查 provider 是否存在
- 没有服务也能启动
- 本地开发 / 联调常用
直连服务(绕过注册中心)
java
@DubboReference(
interfaceClass = IRebateService.class,
url = "dubbo://127.0.0.1:20880"
)
private IRebateService rebateService;作用:
- 不走注册中心
- 直接调用指定 provider
- 常用于本地调试
Mock 使用(重点)
强制 Mock(不调远程)
java
@DubboReference(
interfaceClass = IRebateService.class,
check = false,
mock = "force:return null"
)
private IRebateService rebateService;效果:
- 完全不发 RPC
- 方法直接返回
null - provider / url / 注册中心都无关
失败才 Mock(容灾)
java
@DubboReference(
interfaceClass = IRebateService.class,
mock = "return null"
)
private IRebateService rebateService;效果:
- 正常 → 调远程
- 异常 → 返回 null
Mock 类(可写逻辑)
java
@DubboReference(
interfaceClass = IRebateService.class,
mock = "com.xxx.RebateServiceMock"
)
private IRebateService rebateService;