服务降级
降级 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 属性值的配置错误时,会启动失败,可以根据错误信息排查