Hystrix 使用入门
在很多系统架构中都需要考虑横向扩、单点故障等问题,对于一个庞大的应用集群,部分服务或者机器出现问题不可避免,在出现故障时,如何减少故障的影响、保障集群的高可用,成为一个重要的工作,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 使用入门的更多相关文章
- Netflix Hystrix - 快速入门
Hystrix最初是由Netflix的API team研发的,用于提高API的弹性和性能,2012年在公司内部广受好评. 如果你的应用是一个单独的应用,那几乎不用在意断路的问题. 但在分布式环境中,各 ...
- Hystrix快速入门
祝大家国庆快乐! 对大部分电商和快递公司来说,每年年底(Q4季度)由于双11等大促活动的存在,将面对大量的用户流量,尤其是属于大促的那几天,无论是用户的商品订单还是物流订单,都将是平时的3倍以上.对于 ...
- Hystrix【入门】
公共依赖配置: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spr ...
- hystrix动态修改参数
Hystrix 从入门到深入——运行时修改动态配置 /** * * @author zhangshuo * */ @Component public class DynamicConfigSource ...
- Spring Cloud微服务笔记(五)Feign
Feign 一.Feign概述 Feign是一个声明式的Web Service客户端.在Spring Cloud 中使用Feign,可以做到 使用HTTP请求访问远程服务,就像调用本地方法一样,同时它 ...
- Spring-cloud(六) Hystrix入门
前提 一个可用的Eureka注册中心(文中以之前博客中双节点注册中心,不重要) 一个连接到这个注册中心的服务提供者 快速入门 项目搭建 搭建一个新maven项目,artifactid为Ribbon-c ...
- spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...
- 架构师入门:Spring Cloud系列,Hystrix与Eureka的整合
和Ribbon等组件一样,在项目中,Hystrix一般不会单独出现,而是会和Eureka等组件配套出现.在Hystrix和Eureka整合后的框架里,一般会用到Hystrix的断路器以及合并请求等特性 ...
- Spring Cloud 入门教程(八): 断路器指标数据监控Hystrix Dashboard 和 Turbine
1. Hystrix Dashboard (断路器:hystrix 仪表盘) Hystrix一个很重要的功能是,可以通过HystrixCommand收集相关数据指标. Hystrix Dashboa ...
随机推荐
- [Jedis] ERR wrong number of arguments for 'mget'
看别人写的代码是件比较痛苦的事情,更加痛苦的是别人的代码出错还要负责调试好. 关于如何迅速定位问题和调试代码,我的一点感受是:逐行认真查看错误信息,在这些信息中找自己熟悉的内容(包括文件名.方法名等) ...
- 常见Web应用程序漏洞
不完善的身份验证措施 .这类漏洞包括应用程序登录机制中的各种缺陷,可能会使攻击者破解保密性不强的密码.发动蛮力攻击或完全避开登录. 不完善的访问控制措施.这一问题涉及的情况包括:应用程序无法为数据和功 ...
- SpringBatch Sample (四)(固定长格式文件读写)
前篇关于Spring Batch的文章,讲述了Spring Batch 对XML文件的读写操作. 本文将通过一个完整的实例,与大家一起讨论运用Spring Batch对固定长格式文件的读写操作.实例延 ...
- web(四)html表单类标签
表单类标签 操作者用于输入信息,并将信息提交给服务器的标签集合. 表单标签介绍 form标签:表单元素(其余标签)标签的容器标签 input标签:用于用户信息输入的标签. button标签:按钮标签. ...
- 一些Go操作Kafka的问题
1)包的选择 confluent-kafka-go使用了rdkafka的c库,破坏了go代码的收敛,不使用: sarama不支持groud id 的功能,写consumer需要自己管理消费的parti ...
- HttpClient(4.5.x)正确的使用姿势
前言: httpclient(4.5.x)默认是启动连接池的, 其降低时耗(避免连接初3次握手, 以及关闭4次握手的消耗), 显著提升高并发处理能力(大量减少time_wait), 确实扮演了重要的角 ...
- HttpClient官方sample代码的深入分析(连接池)
前言 之前一直使用apache的httpclient(4.5.x), 进行http的交互处理. 而httpclient实例则使用了http连接池, 而一旦涉及到连接池, 那会不会在使用上有些隐藏很 ...
- 将js和css文件装入localStorage加速程序执行
原理如下: 一次批量加要加载的文件存入数组,采用Ajax方式异步载入各个文件,然后采用循环方式逐个执行下载下来的Js或者Css文件,如果已经被缓存(localStorage)的则省略下载过程. 由于J ...
- 代码basic讲解
key1 import os g = os.walk(r'D:\Users\Quincy_C\PycharmProjects\S6')print(next(g))print(next(g)) 第一次n ...
- Mysql的两种引擎
Innodb引擎: 1.Innodb引擎提供了对数据库ACID事务的支持,并且实现了SQL标准的四种隔离级别 2.该引擎还提供了行级锁和外键约束,它的设计目标是处理大容量数据库系统,它本身其实就是基于 ...