服务降级

降级 Dubbo 服务

推荐使用相关限流降级组件(如 Sentinel)以达到最佳体验。

特性说明

服务降级是指服务在非正常情况下进行降级应急处理。

使用场景

  • 某服务或接口负荷超出最大承载能力范围,需要进行降级应急处理,避免系统崩溃

  • 调用的某非关键服务或接口暂时不可用时,返回模拟数据或空,业务还能继续可用

  • 降级非核心业务的服务或接口,腾出系统资源,尽量保证核心业务的正常运行

  • 某上游基础服务超时或不可用时,执行能快速响应的降级预案,避免服务整体雪崩

使用方式

以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使用

  • 应用消费端引入dubbo-mock-admin依赖

  • 应用消费端启动时设置JVM参数,-Denable.dubbo.admin.mock=true

  • 启动dubbo-admin,在服务Mock->规则配置菜单下设置Mock规则

以服务方法的维度设置规则,设置返回模拟数据,动态启用/禁用规则

注意事项

Dubbo启动时会检查配置,当mock属性值配置有误时会启动失败,可根据错误提示信息进行排查:

  • 配置格式错误,如return+null会报错,被当做mock类型处理,return后面可省略不写或者跟空格后再跟返回值

  • 类型找不到错误,如自定义mock类、throw自定义异常,请检查类型是否存在或是否有拼写错误