spring-cloud学习之hystrix

本文介绍了Hystrix作为Netflix开源的延迟和容错库,在Spring Cloud微服务架构中如何解决雪崩效应,通过服务降级、熔断和限流等功能提升系统稳定性和容错性。文中详细解析了Hystrix在Ribbon和Feign中的具体实现,并提供了测试结果。

一、hystrix介绍

分布式系统存在的问题

如果服务提供者响应非常缓慢,那么消费者对提供者的请求就会被强制等待,知道提供者响应或超时. 在搞负载场景下,如果不做任何处理,此类问题可能导致服务消费者的资源耗竭甚至整个系统崩溃.
所以会引发一个问题,当依赖的服务不可用的时候,服务自身是否会被拖垮,崩溃.
在微服务中把这种 “基础服务故障” 导致 “联级故障” 的现象称为 雪崩效应

什么是Hystrix

spring-cloud的微服务解决这个雪崩问题 引入了Hystrix
Hystrix 是由 Netflix 开源的一个延迟和容错库, 用于隔离访问远程系统,服务或者第三方库,防止联级失败,从而提升系统的可能性与容错性.

hystrix功能
服务降级
服务熔断
服务限流
接近实时的监控

二、hystrix简单实例

在之前feign的项目基础上集成

本案例地址
[git案例地址]

pom
        <!--     hystrix依赖   -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
启动类配置

@EnableHystrix
在这里插入图片描述

1、ribbon使用hystrix

使用hystrix 主要是使用 @HystrixCommand 注解

配置如果熔断返回的方法

    /**
     * 熔断方法
     * ribbon
     */

    public String getRibbonDefaultInfo() {
        return "ribbon 类型 服务熔断";
    }

ribbon使用hystrix比较简单 这里逻辑是偶数请求走熔断

     @GetMapping("ribbon")
    @HystrixCommand(fallbackMethod = "getRibbonDefaultInfo")
    public String ribbon() throws InterruptedException {
        String result = "";
        //定义了一个常量来模拟 超时请求和正常请求
        if (NUM % 2 == 0) {
            NUM += 1;
            System.out.println("线程模拟熔断 睡眠3秒");
            /**
             * 熔断的默认配置是1s没有响应就算失败  走熔断方法
             */
            Thread.sleep(3000);
        } else {
            NUM += 1;
            result = restTemplate.getForObject("http://eureka-client/ribbon", String.class);
        }
        System.out.println("当前请求次数 NUM:" + NUM);
        return result;
    }
测试和结果

http://localhost:9102/ribbon
在这里插入图片描述

熔断请求

在这里插入图片描述

2、fegin使用hystrix

application.yaml 开启fegin的hystrix配置

在这里插入图片描述
Feign是以接口形式工作的,没办法直接使用方法返回
spring-cloud默认已为Feign整合了Hystrix,只要Hystrix在项目的classpath中,Feign默认就会用断路器包裹所有方法

FallbackService


/**
 * feign的熔断方法
 * @Author: qiuwei@19pay.com.cn
 * @Date: 2019-12-06.
 */
@Component
public class FallbackService implements ConsumerService {
    @Override
    public String consumer() {
        return "Feign的熔断方法";
    }
}

在 ConsumerService配置
在这里插入图片描述

测试结果

修改 provider-bak项目
模拟熔断 超时3秒
在这里插入图片描述
http://localhost:9102/consumer
在这里插入图片描述

熔断结果

在这里插入图片描述

三、源码

[git案例地址]

参考 : <<Spring Cloud 与Docker微服务架构实战>>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值