Skip to content

Dubbo 框架使用

Dubbo基础使用

SpringCloud 和 Dubbo 的区别

SpringCloud 主要还是整体的生态比较丰富,但是网关还是使用的 Gateway 方式,然后 dubbo 主要还是聚焦于 通信方式,而且他的通信方式的 rpc 的方式,springcloud 是 http 的方式。

对比维度Spring CloudDubbo
技术定位微服务全家桶高性能 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;