四、Spring Cloud之熔断处理 Hystrix

独角龙
• 阅读 2098

前言

熔断处理什么呢?在微服务项目中,有很多的服务,在服务消费者调用服务提供者的时候可能会出现网络异常或者请求超时或者阻塞等等一系列问题,不过不进行处理的话,就可能导致,长时间等待,进程阻塞,最终导致系统瘫痪。

所以就有了熔断处理,当服务提供者的接口不能访问或者异常异常时,进行降级处理,服务消费者能够正常的处理返回特定是数据。从而达到容灾的目的。

看了一下Hystrix ,其实有很多东西,我们就先来看看Hystrix 的简单使用,由于上节我们也说了Fegin 中集成了Hystrix 和ribbon .所以我们就直接使用Fegin 来实现一个简单的熔断处理的操作。

pom.xml

其实我们完全可以在上一节的ribbon-consumer 的基础上来,我这里为了保持独立性,所以copy 了一份ribbon-consumer 改成hystrix-consumer。
pom文件引入fegin 的依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

在主类中增加@EnableFeignClients,其实这里仅仅使用hystrix 的话,可以使用@EnableCircuitBreaker。
四、Spring Cloud之熔断处理 Hystrix

application.properties

配置文件中开启熔断处理,将feign.hystrix.enabled设置为tue

#开启熔断处理
feign.hystrix.enabled=true

fallback

重点来啦,我们上一节在HelloService 中调服务提供者的接口,所以要做熔断处理的话,就需要在这里进行降级处理,就需要写一个降级处理的方法,如果服务提供者的接口不通,就调用这个方法,返回给客户端。
所以我们在server层创建一个fallback 文件夹,在fallback 包下创建HelloServiceFallback类实现 HelloService。内容如下:

@Component
public class HelloServiceFallback implements HelloService {
    @Override
    public String hello() {
        return "hello error";
    }

    @Override
    public String hello2(@RequestParam(value = "name") String name) {
        return "hello2 error";
    }

    @Override
    public String hello3(@RequestParam(value = "name") String name, @RequestParam(value = "age") String age) {
        return "hello3 error";
    }
    
    @Override
    public String hello4(@RequestBody Map<String, Object> parms) {
        return "hello4 error";
    }
}

注意给整个类加上@Component 注解,然后就是实现HelloService 中的方法啦。

然后我们需要在HelloService 中的@FeignClient 注解做修改

@FeignClient(name = "ribbon-provider",fallback = HelloServiceFallback.class)

name 用来指定服务提供者的服务名,fallback 用来指定降级处理的类。这里就是我们刚刚写HelloServiceFallback。
四、Spring Cloud之熔断处理 Hystrix
好了我们来启动项目测试一下。启动这三个项目,分别是注册中心,服务提供者hystrix-consumer,服务消费者ribbon-provider-9004
四、Spring Cloud之熔断处理 Hystrix
然后我们在界面输入

http://localhost:9006/fegin

然后关闭服务提供者,再调接口试试。
四、Spring Cloud之熔断处理 Hystrix
可以看到服务提供者的接口断掉之前和之后返回的结果是不一样的。说明我们的熔断处理是生效的啦。

番外

今天就说这么多吧,就先学习一下Hystrix 的基本使用,其他的一些功能,我们后续再说

代码上传到github:
https://github.com/QuellanAn/springcloud

后续加油♡

欢迎大家关注个人公众号 "程序员爱酸奶"

分享各种学习资料,包含java,linux,大数据等。资料包含视频文档以及源码,同时分享本人及投递的优质技术博文。

如果大家喜欢记得关注和分享哟❤

四、Spring Cloud之熔断处理 Hystrix

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
springcloud(四):熔断器Hystrix
熔断器雪崩效应在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。如果下图所示:A作为服务提供者,B为A的服务消费者,C和D是B
Easter79 Easter79
3年前
springcloud使用Hystrix实现微服务的容错处理
使用Hystrix实现微服务的容错处理容错机制如果服务提供者相应非常缓慢,那么消费者对提供者的请求就会被强制等待,知道提供者相应超时。在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者的资源耗尽甚至整个系统崩溃。雪崩效应微服务架构的应用系统通常包含多个服务层,微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免
Stella981 Stella981
3年前
Spring Cloud Feign 异常处理
问题最近在项目开发中,使用Feign调用服务,当触发熔断机制时,遇到了以下问题:异常信息形如:TestServiceaddRecord(ParamVO)failedandnofallbackavailable.;获取不到服务提供方抛出的原始异常信息;实现某些业务方法不进入熔断,直接往外抛出异常;
Easter79 Easter79
3年前
SpringCloud服务如何在Eureka安全优雅的下线
Springcloud服务如何在Eureka安全优雅的下线如果直接kill9Springcloud的服务,因为Eureka采用心跳的机制来上下线服务,会导致服务消费者调用此已经kill的服务提供者然后出错,处理这种情况有2中方案。一、利用SpringBootActuato的管理端点(推荐)1、pom中引用Actuato<de
Stella981 Stella981
3年前
Hystrix Feign 特定状态码不熔断
HystrixFeign特定状态码不熔断背景部分业务校验规范或疏忽场景,传入badrequest导致接口熔断,影响接口正常流量处理重写Feignerrordecoder逻辑importcom.netflix.hystrix.exception.HystrixB
Easter79 Easter79
3年前
SpringCloud 进阶之Hystrix(断路器)
1\.Hystrix断路器Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性;"断路器"本身是一种开关装置,当某个服务单元发生故障之后,通过断
Stella981 Stella981
3年前
Hystrix异常处理及线程池划分
异常处理异常传播在HystrixCommand实现的run()方法中抛出异常时,除了HystrixBadRequestException之外,其他异常均会被Hystrix认为命令执行失败并触发服务降级的处理逻辑,所以当需要在命令执行中抛出不触发服务降级的异常时来选择它。在使用注解配置实现Hystrix命令时,可以忽略指定的异常
Wesley13 Wesley13
3年前
NIO
一、什么是阻塞和非阻塞?传统的IO流都是阻塞式的。也就是说,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务。因此,在完成网络通信进行IO操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端
Stella981 Stella981
3年前
Hystrix熔断机制原理剖析
一、前言在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是A系统调用B系统服务,B系统调用C系统的服务。当尾部应用C发生故障而系统B没有服务降级时候可能会导致B,甚至系统A瘫痪,这种现象被称为雪崩现象。所以在系统设计时候要使用一定的降级策略,来保证当服务提供方服务不可用时候,服务调用方可以切换到降
SpringCloud-Hystrix服务熔断与降级工作原理&源码 | 京东物流技术团队
在生活中,如果电路的负载过高,保险箱会自动跳闸,以保护家里的各种电器,这就是熔断器的一个活生生例子。在Hystrix中也存在这样一个熔断器,当所依赖的服务不稳定时,能够自动熔断,并提供有损服务,保护服务的稳定性。在运行过程中,Hystrix会根据接口的执行状态(成功、失败、超时和拒绝),收集并统计这些数据,根据这些信息来实时决策是否进行熔断。