暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Springcloud 之 Hystrix 服务熔断

皮皮克克 2022-12-29
108

点击关注公众号,干货第一时间送达



在股市交易中,当波幅达到定点时,

就会触发熔断机制,暂停交易

同样,在微服务中,当服务端无法正常处理客户端请求,又需要在规定时间返回处理结果,避免请求负载过高,也配备的有熔断机制。

即 Hystrix 服务熔断。

前面的几篇文章:

Springcloud 之 Eureka 服务调用

Springcloud 之 Ribbon 负载均衡

Springcloud 之 Feign

小编带着大家,构建了Eureka + Ribbon + Feign

今天,我们继续带来 Hystrix。

(友情提示:该篇文章是在上篇:Springcloud 之 Feign 的 IDEA 工程基础上做改进,下面不再赘述IDEA工程建设细节)



一、Hstrix 概念

先明白一个概念:服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,即服务雪崩


为了应对服务雪崩,Hstrix诞生!

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



二、Hstrix 服务熔断 演示

1,按照前面两篇文章讲解的方式,新建 Module

(如果对IDEA新建Module有疑惑的小伙伴,可以翻看小编之前的文章:Springcloud 之 Eureka 服务搭建。有详细介绍到如何搭建 IDEA 工程)

2,添加 pom.xml 依赖

        <!--        将微服务provider注册进入eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


3,添加 application.yml 配置文件

server:
  port: 8001
spring:
  application:
    name: microservicecloud-dept

eureka:
  client: #客户端注册进入eureka服务列表
    service-url:
#      defaultZone: http://localhost:7001/eureka  单机版eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka #集群版eureak
  instance:
    instance-id: microservicecloud-provider-hystrix-8001 #修改当前eureka客户端instance名
    prefer-ip-address: true #访问路径可以显示IP地址


4,启动类添加 @EnableHystrix 注解

@SpringBootApplication
@EnableEurekaClient
@EnableHystrix
public class ProviderHystrixApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderHystrixApplication.class,args);
    }
}


5,新建 Controller 方法,并配置 @HystrixCommand 熔断方法

@RestController
public class DeptController {

    @RequestMapping("/getById")
    @HystrixCommand(fallbackMethod = "processHystrix_GetById")
    public String getById(@RequestBody(required = false) String id){
        if ("pipickeke".equals(id)){
            throw new RuntimeException();
        }
        return "provider 8001";
    }

    public String processHystrix_GetById(@RequestBody(required = false) String id){
        return "当前服务异常,触发Hystrix熔断机制";
    }
}


6,调试

启动各项服务:

(关于当前小编所搭建的 Eureka 集群及服务代码细节,可以翻看之前的文章,都有详细演示,在此不再赘述)


调用消费端接口:http://localhost/consumer/get

服务正常:


服务熔断:


因为我们在服务提供端的接口里面,配置了如下熔断机制:



结束语:
Ok,到此为止,就是本篇文章的全部内容了。
该文章主要讲了 Hystrix 服务熔断,为了更好的理解本文,建议翻看前面的文章:
Springcloud 之 Feign
Springcloud 之 Ribbon 负载均衡
Springcloud 之 Eureka 服务调用
Springcloud 之 Eureka 服务搭建
Springcloud 之 Eureka 集群搭建
如果各位有不懂的地方,欢迎发消息给小编,小编会进行详细地解答。
最后,请屏幕前的各位小可爱,动动你们的小手,给小编一个“在看”吧!

文章转载自皮皮克克,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论