在很多系统架构中都需要考虑横向扩、单点故障等问题,对于一个庞大的应用集群,部分服务或者机器出现问题不可避免,在出现故障时,如何减少故障的影响、保障集群的高可用,成为一个重要的工作,Hystrix 是一个帮助解决分布式系统交互时超时处理和容错的类库,它同样拥有保护系统的能力。Hystrix 主要实现以下功能:

  • 当所依赖的网络服务发生延迟或者失败,对访问的客户端程序进行保护,在短时间内访问失败会导致执行回退逻辑。
  • 在分布式系统中,停止级联故障。
  • 网络服务恢复正常后,可以快速恢复客户端的访问能力。
  • 调用失败时,执行服务回退

Hystrix 使用示例

  • 创建项目

    创建Maven项目,命名为 hystrix-client,并增加 hystrix 依赖和 Http 提交相关依赖,POM.xml 内容如下:

    <?xmlversion="1.0"encoding="UTF-8"?>

    <projectxmlns="http://maven.apache.org/POM/4.0.0"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.lixue</groupId>

    <artifactId>hystrix-client</artifactId>

    <version>1.0-SNAPSHOT</version>

    <dependencies>

    <!--Hystrix依赖-->

    <dependency>

    <groupId>com.netflix.hystrix</groupId>

    <artifactId>hystrix-core</artifactId>

    <version>1.5.12</version>

    </dependency>

    <!--logback日志依赖-->

    <dependency>

    <groupId>ch.qos.logback</groupId>

    <artifactId>logback-classic</artifactId>

    <version>1.2.3</version>

    </dependency>

    <!--http客户端依赖-->

    <dependency>

    <groupId>org.apache.httpcomponents</groupId>

    <artifactId>httpclient</artifactId>

    <version>4.5.3</version>

    </dependency>

    </dependencies>

    </project>

  • 创建 Hystrix 命令类

    命令类需要继承 HystrixCommand 类,并实现其 run 方法执行具体业务,实现 getFallback 方法执行回退业务,在调用 run 方法超时或者断路器处于打开状态时,会调用 getFallback 方法进行回退。

    package org.lixue.hystrixclient;

    import com.netflix.hystrix.HystrixCommand;

    import com.netflix.hystrix.HystrixCommandGroupKey;

    import com.netflix.hystrix.HystrixCommandProperties;

    import org.apache.http.HttpResponse;

    import org.apache.http.client.methods.HttpGet;

    import org.apache.http.impl.client.CloseableHttpClient;

    import org.apache.http.impl.client.HttpClients;

    import org.apache.http.util.EntityUtils;

    public class SpeakSleepCommand extends HystrixCommand<String>{

    private int sleep;

    private CloseableHttpClient httpClient;

    private String url;

    public SpeakSleepCommand(intsleep){

    super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("Speak"))

    .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()));

    this.sleep=sleep;

    this.httpClient=HttpClients.createDefault();

    this.url="http://localhost:8080/speak/sleep?seconds="+this.sleep;

    }

    protected String run() throws Exception{

    try{

    HttpGet request=new HttpGet(this.url);

    HttpResponse response=httpClient.execute(request);

    return EntityUtils.toString(response.getEntity());

    }catch(Exceptionex){

    ex.printStackTrace();

    return ex.getMessage();

    }

    }

    @Override

    protected String getFallback(){

    return"call fallback";

    }

    }

  • 创建启动类

    实例化我们创建的 SpeakSleepCommand 类,并调用 execute 来执行(调用 run 方法不会使用 Hystrix)

    package org.lixue.hystrixclient;

    public class HystrixClient{

    public static void main(String[]args){

    SpeakSleepCommand cmd=new SpeakSleepCommand(10);

    try{

    Stringresult=cmd.execute();

    System.out.println("请求结果="+result);

    }catch(Exceptionex){

    ex.printStackTrace();

    }

    }

    }

  • 测试验证

    默认情况下,Hystrix 是 1000 毫秒超时,我们在实例化传入的是10秒,因此在调用的时候会执行 getFallback 方法;如果修改在实例化传入 0 秒,不进行阻塞,会正常返回结果值。

Hystrix 使用入门的更多相关文章

  1. Netflix Hystrix - 快速入门

    Hystrix最初是由Netflix的API team研发的,用于提高API的弹性和性能,2012年在公司内部广受好评. 如果你的应用是一个单独的应用,那几乎不用在意断路的问题. 但在分布式环境中,各 ...

  2. Hystrix快速入门

    祝大家国庆快乐! 对大部分电商和快递公司来说,每年年底(Q4季度)由于双11等大促活动的存在,将面对大量的用户流量,尤其是属于大促的那几天,无论是用户的商品订单还是物流订单,都将是平时的3倍以上.对于 ...

  3. Hystrix【入门】

    公共依赖配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...

  4. hystrix动态修改参数

    Hystrix 从入门到深入——运行时修改动态配置 /** * * @author zhangshuo * */ @Component public class DynamicConfigSource ...

  5. Spring Cloud微服务笔记(五)Feign

    Feign 一.Feign概述 Feign是一个声明式的Web Service客户端.在Spring Cloud 中使用Feign,可以做到 使用HTTP请求访问远程服务,就像调用本地方法一样,同时它 ...

  6. Spring-cloud(六) Hystrix入门

    前提 一个可用的Eureka注册中心(文中以之前博客中双节点注册中心,不重要) 一个连接到这个注册中心的服务提供者 快速入门 项目搭建 搭建一个新maven项目,artifactid为Ribbon-c ...

  7. spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护

    在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...

  8. 架构师入门:Spring Cloud系列,Hystrix与Eureka的整合

    和Ribbon等组件一样,在项目中,Hystrix一般不会单独出现,而是会和Eureka等组件配套出现.在Hystrix和Eureka整合后的框架里,一般会用到Hystrix的断路器以及合并请求等特性 ...

  9. Spring Cloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine

    1. Hystrix Dashboard (断路器:hystrix 仪表盘)  Hystrix一个很重要的功能是,可以通过HystrixCommand收集相关数据指标. Hystrix Dashboa ...

随机推荐

  1. 《统计学习方法》笔记(9):EM算法和隐马尔科夫模型

    EM也称期望极大算法(Expectation Maximization),是一种用来对含有隐含变量的概率模型进行极大似然估计的迭代算法.该算法可应用于隐马尔科夫模型的参数估计. 1.含有隐含参数的概率 ...

  2. Python 基于队列的进程通信

    from multiprocessing import Process,Queue def f1(q): q.put('约吗?') if __name__ == '__main__': q = Que ...

  3. git 服务器安装流程

    参考:https://git-scm.com/book/zh/v2/%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84-Git-%E5%9C%A8%E6%9C% ...

  4. C/C++内存泄漏检测 —— memleax

    memleax是个开源项目,原理是通过注入hook目标进程的malloc(new也是用的malloc)内存分配函数,在指定时间未释放则认为内存泄漏.优点是不需要重启,attach到目标进程. gith ...

  5. C++指针易错点梳理

    1 指针定义 指针是一个变量:指针的值是另一个变量的地址.变量的声明 type *var-name; var-name 是指针变量的名称.星号是用来指定一个变量var-name是指针变量. int * ...

  6. c日志宏

    仅供参考,不推荐 #ifdef _DEBUG #define LOGDEBUG(format, ...)\ {\ FILE *fp = fopen("nccli.log", &qu ...

  7. Ubuntu18.10下运行blender2.80bate闪退(问题?)

    Ubuntu18.10下直接运行blender2.80bate闪退, 运行blender2.79正常. ================= root@tom-laptop:/# uname -aLin ...

  8. [ZOJ 4062][2018ICPC青岛站][Plants vs. Zombies]

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4062 题目大意:给一个大小为n的数组,数组编号从1到n,每一个元素的值代表 ...

  9. python------模块定义、导入、优化 ------->Shelve模块

    1. shelve模块 是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. import shelve import datetime d = ...

  10. oracle完全之dbf文件出现问题, ORA-01219

    alter database datafile '/data/app/oradata/ora237/users01.dbf' offline drop; 强制删除该故障文件