springcloud 入门(4) Hystrix

简介: springcloud 入门(4) Hystrix

Hystrix

Hystrix介绍

在分布式系统环境中,微服务之间难免会互相依赖调用,也难免会遇到服务调用失败的情况,这时就需要一个公共组件来维护系统的健壮性,保证系统有一定的容错能力,并且对服务进行监控和保护,Hystrix就是这个公共组件,它能够在服务失效的情况下,通过隔离系统依赖的方式防止服务级联失败。

Hystrix是Netflix的一个开源组件,2011-2012年诞生并成熟,Netflix的很多项目都使用了Hystrix。

设计目标

1、为通过第三方客户端库访问的依赖项(通常通过网络)提供保护和控制延迟和故障

2、停止复杂分布式系统中的级联故障

3、故障快速恢复。

4、在可能的情况下,后退并优雅地降级

5、启用近实时监视、警报和操作控制

快速入手

对于服务熔断需要考虑两种情况:

1、服务提供方正常,但是接口报错

2、服务提供方失联

服务提供方正常,接口报错

对于这种情况更像是异常处理。

分以下三个步骤:

1、服务提供方引入Hystrix 依赖

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

2、在服务提供方启动类加注解

@EnableDiscoveryClient
@EnableCircuitBreaker
@EnableEurekaClient
@SpringBootApplication(scanBasePackages = {"site.sunlong.*.*"})
public class EurekaProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaProviderApplication.class, args);
    }
}

3、对外提供的接口添加@HystrixCommand注解,fallbackMethod配置调用类的指定方法

ProviderController.java

@RequestMapping("/provider")
@RestController
public class ProviderController {
    @Resource
    private ApplicationArguments applicationArguments;
    @Autowired
    private ProviderService providerService;
    @GetMapping("/hello")
    public String test(){
        final String[] sourceArgs = applicationArguments.getSourceArgs();
        System.out.println(Arrays.toString(sourceArgs));
        return "Hello , I'm provider ,args:"+ Arrays.toString(sourceArgs);
    }
    @HystrixCommand(fallbackMethod = "testHystrixFallBack")
    @GetMapping("/getName/{name}")
    public String testHystrix(@PathVariable String name) throws Exception {
        return providerService.getArgs(name);
    }
    String testHystrixFallBack(@PathVariable String name){
        return "name: "+name +" is not exist.";
    }
}

ProviderServiceImpl.java

@Service
public class ProviderServiceImpl implements ProviderService {
    @Resource
    private ApplicationArguments applicationArguments;
    /**
     * 获取启动参数
     *
     * @return
     */
    @Override
    public String getArgs(String name) throws Exception {
        if ("ex".equals(name)) {
            throw new Exception();
        }
        return name+"---"+Arrays.toString(applicationArguments.getSourceArgs());
    }
}

测试:

浏览器地址栏输入服务者调用接口

正确调用:

image.png

输入报错参数调用:

image.png

服务提供方失联

如果服务提供方失联为了更友好的体验,要在消费端进行及时的降级

首先要在消费端配置文件中添加 feign.hystrix.enabled=true

然后进行反馈,降级反馈有两种实现方式

实现feign.hystrix.FallbackFactory

@Component
public class ProviderFallbackFactory implements FallbackFactory<ProviderService> {
    @Override
    public ProviderService create(Throwable throwable) {
        return new ProviderServiceFallback();
    }
}

在消费端实现生产端接口

@Component
public class ProviderServiceFallback implements ProviderService {
    @Override
    public String test() {
        return "consumer - test - fallback";
    }
    @Override
    public String testHystrix(String name) {
        return "consumer -testHystrix- fallback";
    }
}

FeignClient注解修改:

如果是第一张方式添加属性fallbackFactory = ProviderFallbackFactory.class

否则添加属性fallback = ProviderServiceFallback.class

@FeignClient(name = "PROVIDER" , path = "provider" , fallback = ProviderServiceFallback.class)
//@FeignClient(name = "PROVIDER" , path = "provider" , fallbackFactory = ProviderFallbackFactory.class)
public interface ProviderService {
    @GetMapping("hello")
    public String test();
    @GetMapping("getName/{name}")
    public String testHystrix(@PathVariable String name);
}

测试:

停掉服务提供方,进行接口测试:

image.png

至此一个Hystrix的简单使用就完成了,下篇将会学习一下HystrixDashboard的使用


springcloud 搭建更多请查看:

springcloud 项目一步一步搭建(1)之eureka

springcloud 项目一步一步搭建(2)之Ribbon

springcloud 项目一步一步搭建(3)之Feign


GitHub地址:

https://github.com/ArronSun/micro-services-practice.git


能力一般,水平有限,如有错误,请多指出。


目录
相关文章
|
4月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
30天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
159 23
|
2月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
53 3
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14933 30
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
488 15
|
4月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
111 3
|
4月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
183 5
|
4月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成