【dubbo系列四】熔断-服务降级

目录

熔断的作用

解决provider长时间未响应思路

Dubbo服务降级使用

1.mock机制

 2.服务消费者mock属性的使用

3.失败调用自定义的ServiceMock对应方法

四种mock调用策略

1.fail 策略

2.fail:策略

总结

熔断的作用

Dubbo引用熔断(服务降级)的目的是为了防止provider无报错情况下长时间的响应 ,影响了其他服务进度,从而导致降低了consumer消费性能

解决provider长时间未响应思路

遇到长时间未响应及频繁超时等情况时,将consumer调用provider的请求,直接短路掉,不实际调用,而是直接返回一个mock的值。等provider服务恢复稳定之后,再重新调用

1、一定是先降级优先级地的接口,两权相害取其轻

2、如果服务链路整体没有性能特别差的点,比如就是外部流量突然激增,那么就从外到内开始降级。

3、如果某个服务能检测到自身负载上升,那么可以从这个服务自身做降级。

Dubbo服务降级使用

注意:在执行Mock服务实现类 mock() 方法前,会先发起远程调用,当远程服务调用失败时,才会降级执行mock功能。

1.mock机制

 2.服务消费者mock属性的使用

@DubboReference注解或者dubbo:reference标签的mock属性

import org.apache.dubbo.config.annotation.DubboReference;

@Controller
public class UserController {

    @DubboReference(retries = 1,mock = "true")
    UserService userService;
}

3.失败调用自定义的ServiceMock对应方法

3.1在interface中自定义一个mock下的实现类尾部加Mock即可

 3.2实现mock属性下实现类接口

四种mock调用策略

配置方式为 mock=“fail:策略” 或者 mock=“策略"

1.fail 策略

1.1 mock = "true"

指定 mock 策略为布尔类型,且为 true,当调用远程服务失败后, 就会执行调用其他provider

@DubboReference(retries = 1,mock = "true")

1.2 mock = "具体的mock实现类"

指定 mock 策略为具体的 mock 实现类, 当调用远程服务失败时, 就会执行 mock 实现类的 sayHello 方法(调用其他provider).

@DubboReference(mock = "com.cxl.service.UserService")

1.3 mock = "抛出自定义异常"

指定 mock 策略为抛出自定义异常, 当远程服务调用失败后, 会给服务消费者抛出自定义异常.

@DubboReference(retries = 1,mock = "throw com.cxl.excep.CustomExcep")

1.4 mock="返回 mock 数据"

指定 mock 属性值为返回 mock 数据,当远程服务调用失败后,就会给服务消费者返回 null,(mock数据可以不写,默认返回null)。

@DubboReference(retries = 1,mock = "return null")

2.fail:策略

2.1 mock = "force:true"

指定 mock 策略为布尔类型,且为 true,当调用远程服务失败后, 就会执行调用其他provider

@DubboReference(retries = 1,mock = "force:true")

2.2 mock = "force:执行的Mock实现类"

指定 mock 策略为具体的 mock 实现类, 当调用远程服务失败时, 就会执行 mock 实现类的 sayHello 方法(调用其他provider).

@DubboReference(mock = "force:com.cxl.service.UserService")

2.3 mock = "force:抛出自定义异常"

指定 mock 策略为抛出自定义异常, 当远程服务调用失败后, 会给服务消费者抛出自定义异常.

@DubboReference(retries = 1,mock = "force:throw com.cxl.excep.CustomExcep")

2.4 mock="force:返回 mock 数据"

指定 mock 属性值为返回 mock 数据,当远程服务调用失败后,就会给服务消费者返回 null,(mock数据可以不写,默认返回null)。

@DubboReference(retries = 1,mock = "force:return null")

总结

Dubbo 的 mock 的策略总共分为两大类

一是当服务调用失败时,去进行 mock 调用;

二是绕过服务调用,直接进行 mock 调用。

具体的 mock 调用策略又分别 4 种

1、返回 mock 数据

2、抛出自定义异常

3、执行默认的 Mock 实现类

4、执行指定的 Mock 实现类

dubbo系列文章

        【dubbo系列一】搭建 dubbo 框架_萌小崔的博客-CSDN博客

        【dubbo系列二】负载均衡_萌小崔的博客-CSDN博客

        【dubbo系列三】容错机制_萌小崔的博客-CSDN博客

        【dubbo系列五】分组聚合_萌小崔的博客-CSDN博客


Thanks!

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北九二七

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值