服务降级

降级 Dubbo 服务

功能描述

建议使用相关的限流降级组件(如 Sentinel)来达到最佳体验。参考示例实践:微服务治理/限流降级

服务降级是指在异常情况下对服务进行降级处理的应急措施。

使用场景

  • 当某个服务或接口的负载超过最大承载能力范围时,需要进行降级应急处理,避免系统崩溃
  • 当调用某个非关键服务或接口时,临时不可用,返回模拟数据或 null,业务可以继续可用
  • 降级非核心业务服务或接口,释放系统资源,尽量保证核心业务正常运行
  • 当上游基础服务超时或不可用时,执行可以快速响应的降级方案,避免整体服务雪崩

使用方法

以 xml 配置为例:(通过注解配置类似)

1. 配置 mock="true"

示例

<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="true" />

此方法需要在同一个包下有一个类名 + Mock 后缀的实现类,即在 com.xxx.service 包下有一个 DemoServiceMock 类。

2. 配置 mock="com.xxx.service.DemoServiceMock"

示例

<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="com.xxx.service.DemoServiceMock" />

此方法指定 Mock 类的全路径。

3. 配置 mock="[fail|force]return|throw xxx"

  • fail 或 force 关键字可选,表示调用失败或不调用强制执行 mock 方法,如果未指定关键字,默认是 fail
  • return 表示指定返回结果,throw 表示抛出指定异常
  • xxx 根据接口的返回类型解析,可以指定返回值或抛出自定义异常

示例

<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="return" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="return null" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="fail:return aaa" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="force:return true" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="fail:throw" />
<dubbo:reference id="demoService" interface="com.xxx.service.DemoService" mock="force:throw java.lang.NullPointException" />

4. 与 dubbo-admin 联用

在服务方法维度设置规则,设置返回 mock 数据,动态启用/禁用规则

注意事项

Dubbo 启动时会检查配置,当 mock 属性值的配置错误时,会启动失败,可以根据错误信息排查