zoukankan      html  css  js  c++  java
  • Hystrix初识

    0、前提

    你要会使用服务调用组件、服务注册组件,因为hystrix是在对他们出现问题的一个解决实现。

    1、简介

    这是我们的服务的调用流程,我们首先是接口化的请求调用,使用的是Feign,然后我们hystrix处理熔断,然后就是ribbon去找到合适的服务提供端,然后再去有底层的okhttp或httpclient来实际完成请求的流程。

    那我们可能会有一个问题,就是服务端集群的环境如何处理,如何达到负载均衡,那这些都是由Ribbon来完成,我们的Feign只是提供一个接口化的调用方式,方便操作。

    还有一个问题,我们如果服务都挂了,那这个调用的流程怎么办?用户请求的线程会不会直接卡在这里?长时间未完成调用过程的话,用户体验如何处理?

    使用Hystrix就可以处理这些情况,服务挂掉则会执行我们指定的回调,请求的线程会直接停止,这样尽量减少浪费性能,提供调用超时机制,超过指定时间则代表此服务挂了及时止损。

    现在我们再来看其Hystrix的概念:

    Hystrix 是一个供分布式系统使用,提供延迟和容错功能,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。
    
    比如系统中有很多服务,当某些服务不稳定的时候,使用这些服务的用户线程将会阻塞,如果没有隔离机制,系统随时就有可能会挂掉,
    从而带来很大的风险。SpringCloud使用Hystrix组件提供断路器、资源隔离与自我修复功能。下图表示服务B触发了断路器,阻止了级联失败
    

    2、基本使用

    1、引入依赖

    <!--Spring Cloud依赖版本-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Hoxton.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
    

    2、配置文件加入配置

    #开启熔断机制
    feign.hystrix.enabled=true
    # 设置hystrix超时时间,默认1000ms
    hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000
    

    3、启动类加入注解

    @EnableCircuitBreaker
    

    4、给我们的client接口创建实现类

    创建实现类后,如果接口中方法为a的服务调用调用出现问题,那么则会去回调我们实现类中的a方法。

    Client:

    /**
     * @author vod服务的客户端
     */
    @FeignClient(name = "service-vod",fallback = VodDegradeClient.class) /*加入fallback后当服务调用出问题时就会去调用此类中对应的实现方法*/
    @Component
    public interface VodClient {
        @GetMapping("/vod/say")
        R hello();
    }
    

    实现Client:

    /**
     * @author
     * VodClient熔断处理
     */
    @Component
    public class VodDegradeClient implements VodClient {
        @Override
        public R hello() {
            return R.ERROR().message("网络超时,请稍后重试!");
        }
    }
    
    

    5、测试

    如果service-vod服务出现问题,那么则会去调用VodDegradeClient中的内容。

  • 相关阅读:
    基于差分隐私的安全机制
    基于散列和RSA的纵向联邦学习样本对齐实现方案
    富文本及编辑器的跨平台方案
    计算机字符编码的前世今生
    探究Presto SQL引擎(1)-巧用Antlr
    vivo 全球商城:优惠券系统架构设计与实践
    复杂多变场景下的Groovy脚本引擎实战
    分布式存储系统可靠性:系统量化估算
    手把手教你实现Android编译期注解
    灵活运用分布式锁解决数据重复插入问题
  • 原文地址:https://www.cnblogs.com/daihang2366/p/13683564.html
Copyright © 2011-2022 走看看