【微服务】服务熔断与降级(二)

上篇博客,我们了解到服务熔断和降级解决的问题,这篇小编将为您介绍服务熔断与降级的用法,从实践中更深理解熔断与降级。

Hystrix断路器

一个用于处理分布式系统的延迟和容错的开源库,分布式系统中,许多依赖不可避免会调用失败,比如超时、异常等,Hystrix能保证,一个依赖出问题,不会导致整体服务失败,避免级联故障,提高分布式系统的弹性。

不错,服务熔断和降级就靠它了。

服务熔断:

从服务提供者考虑:消费者调用提供者,提供者无法提供服务时(异常),提供者会给出提示。

1、添jar
2、改application.yml
3、启动类加@Enable…注解
4、写各层代码:dao/service/controller

@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
//一旦调用服务方法失败并抛出错误信息后,会自动调用@HystrixCommand标注的fallbackMethod,调用类中的指定方法
@HystrixCommand(fallbackMethod = "processHystrix_Get")
public Dept get(@PathVariable("id") Long id) {
    Dept dept = service.findById(id);
    if (null == dept) {
        throw new RuntimeException("该ID:" + id + "没有对应的信息");
    }

    return dept;
}

public Dept processHystrix_Get(@PathVariable("id") Long id) {
    return new Dept().setDeptno(id).setDname("该ID:" + id + "没有对应的信息,,null--@HystrixCommand").setDb_source("no this database in MySQL");
}

但是这种方式,有不合理的地方:
第一、加一个方法都要加一个@Hystrix注解,方法膨胀;
第二、处理异常和业务逻辑高耦合。根据面向切面AOP,可以实现处理异常和业务逻辑解耦。

要实现解耦,我们看controller,注入了service,所以我们可以把异常放到接口的地方,这样就可以解耦。别急,接着看服务降级。

服务降级:

降级是在客户端。

在服务熔断后,服务器不再被调用,消费端会调用fallbackfactory的方法,拿到提示:服务提供者已停止服务,不要再访问。

这就是所谓服务水平下降,但还可用,比直接挂掉要好。

controller代码:

@Autowired
private DeptClientService service;

@RequestMapping(value = "/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id)
{
    return this.service.get(id);
}

api层定义:DeptClientService

//该接口下哪个方法抛异常,会调fallbackFactory
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory=DeptClientServiceFallbackFactory.class)
public interface DeptClientService
{
    @RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
    public Dept get(@PathVariable("id") long id);
}

定义DeptClientServiceFallbackFactory类:

@Component // 不要忘记添加
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService>
{
    @Override
    public DeptClientService create(Throwable throwable)
    {
        return new DeptClientService() {
            @Override
            public Dept get(long id)
            {
                return new Dept().setDeptno(id).setDname("该ID:" + id + "没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
                        .setDb_source("no this database in MySQL");
            }

            @Override
            public List<Dept> list()
            {
                return null;
            }

            @Override
            public boolean add(Dept dept)
            {
                return false;
            }
        };
    }
}

Dashboard

Hystrix dashboard,一个可视化界面,监控所有Provider,所有Provider都需要配置监控依赖spring-boot-starter-actuator。
这里写图片描述
填好对应信息,监控的服务器,点击Monitor Stream即可看到监控页面:
这里写图片描述

监控窗口怎么看?

7色——7种颜色
1圈——绿色的圈,颜色变化代表实例的健康程度,它的健康度从绿色<黄色<橙色<红色递减,大小代表实例的请求流量的变化,快速发现故障实例和高压实例
1线——流量上升和下降趋势

总结:

技术源于生活。

随着我们划分的微服务越来越多,各种配置我们就要统一管理了,分布式配置中心Config,您应该想了解的,请看下篇博客!

感谢您的阅读!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值