# Hystrix **Repository Path**: shifeng1221/Hystrix ## Basic Information - **Project Name**: Hystrix - **Description**: Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.源码解析文章:http://www.iocoder.cn/categories/Hystrix/?github - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2020-07-10 - **Last Updated**: 2024-05-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Hystrix: Latency and Fault Tolerance for Distributed Systems # 个人博客 [http://www.iocoder.cn](http://www.iocoder.cn/?github) ------- ![](http://www.iocoder.cn/images/common/wechat_mp.jpeg) > 🙂🙂🙂关注**微信公众号:【芋艿的后端小屋】**有福利: > 1. RocketMQ / MyCAT / Sharding-JDBC **所有**源码分析文章列表 > 2. RocketMQ / MyCAT / Sharding-JDBC **中文注释源码 GitHub 地址** > 3. 您对于源码的疑问每条留言**都**将得到**认真**回复。**甚至不知道如何读源码也可以请教噢**。 > 4. **新的**源码解析文章**实时**收到通知。**每周更新一篇左右**。 ------- * 知识星球:![知识星球](http://www.iocoder.cn/images/Architecture/2017_12_29/01.png) * 熔断器 **Hystrix** * [《Hystrix 源码解析 —— 调试环境搭建》](http://www.iocoder.cn/Hystrix/build-debugging-environment?github&1608) * [《Hystrix 源码解析 —— 执行命令方式》](http://www.iocoder.cn/Hystrix/command-execute-mode?github&1608) * [《Hystrix 源码解析 —— 执行结果缓存》](http://www.iocoder.cn/Hystrix/command-execute-result-cache?github&1608) * [《Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑》](http://www.iocoder.cn/Hystrix/command-execute-first-run?github&1608) * [《Hystrix 源码解析 —— 命令执行(二)之执行隔离策略》](http://www.iocoder.cn/Hystrix/command-execute-second-isolation-strategy?github&1608) * [《Hystrix 源码解析 —— 命令执行(三)之执行超时》](http://www.iocoder.cn/Hystrix/command-execute-third-timeout?github&1608) * [《Hystrix 源码解析 —— 请求执行(四)之失败回退逻辑》](http://www.iocoder.cn/Hystrix/command-execute-fourth-fallback?github&1608) * [《Hystrix 源码解析 —— 命令合并执行》](http://www.iocoder.cn/Hystrix/command-collapser-execute?github&1608) * [《Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker》](http://www.iocoder.cn/Hystrix/circuit-breaker?github&1608) [![NetflixOSS Lifecycle](https://img.shields.io/osslifecycle/Netflix/PROJECTNAMEHERE.svg)]() [![][travis img]][travis] [![][maven img]][maven] [![][license img]][license] Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable. ## Full Documentation See the [Wiki](https://github.com/Netflix/Hystrix/wiki/) for full documentation, examples, operational details and other information. See the [Javadoc](http://netflix.github.com/Hystrix/javadoc) for the API. ## Communication - Google Group: [HystrixOSS](http://groups.google.com/d/forum/hystrixoss) - Twitter: [@HystrixOSS](http://twitter.com/HystrixOSS) - [GitHub Issues](https://github.com/Netflix/Hystrix/issues) ## What does it do? #### 1) Latency and Fault Tolerance Stop cascading failures. Fallbacks and graceful degradation. Fail fast and rapid recovery. Thread and semaphore isolation with circuit breakers. #### 2) Realtime Operations Realtime monitoring and configuration changes. Watch service and property changes take effect immediately as they spread across a fleet. Be alerted, make decisions, affect change and see results in seconds. #### 3) Concurrency Parallel execution. Concurrency aware request caching. Automated batching through request collapsing. ## Hello World! Code to be isolated is wrapped inside the run() method of a HystrixCommand similar to the following: ```java public class CommandHelloWorld extends HystrixCommand { private final String name; public CommandHelloWorld(String name) { super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup")); this.name = name; } @Override protected String run() { return "Hello " + name + "!"; } } ``` This command could be used like this: ```java String s = new CommandHelloWorld("Bob").execute(); Future s = new CommandHelloWorld("Bob").queue(); Observable s = new CommandHelloWorld("Bob").observe(); ``` More examples and information can be found in the [How To Use](https://github.com/Netflix/Hystrix/wiki/How-To-Use) section. Example source code can be found in the [hystrix-examples](https://github.com/Netflix/Hystrix/tree/master/hystrix-examples/src/main/java/com/netflix/hystrix/examples) module. ## Binaries Binaries and dependency information for Maven, Ivy, Gradle and others can be found at [http://search.maven.org](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22com.netflix.hystrix%22%20AND%20a%3A%22hystrix-core%22). Change history and version numbers => [CHANGELOG.md](https://github.com/Netflix/Hystrix/blob/master/CHANGELOG.md) Example for Maven: ```xml com.netflix.hystrix hystrix-core x.y.z ``` and for Ivy: ```xml ``` If you need to download the jars instead of using a build system, create a Maven pom file like this with the desired version: ```xml 4.0.0 com.netflix.hystrix.download hystrix-download 1.0-SNAPSHOT Simple POM to download hystrix-core and dependencies http://github.com/Netflix/Hystrix com.netflix.hystrix hystrix-core x.y.z ``` Then execute: ``` mvn -f download-hystrix-pom.xml dependency:copy-dependencies ``` It will download hystrix-core-*.jar and its dependencies into ./target/dependency/. You need Java 6 or later. ## Build To build: ``` $ git clone git@github.com:Netflix/Hystrix.git $ cd Hystrix/ $ ./gradlew build ``` Futher details on building can be found on the [Getting Started](https://github.com/Netflix/Hystrix/wiki/Getting-Started) page of the wiki. ## Run Demo To run a [demo app](https://github.com/Netflix/Hystrix/tree/master/hystrix-examples/src/main/java/com/netflix/hystrix/examples/demo/HystrixCommandDemo.java) do the following: ``` $ git clone git@github.com:Netflix/Hystrix.git $ cd Hystrix/ ./gradlew runDemo ``` You will see output similar to the following: ``` Request => GetUserAccountCommand[SUCCESS][8ms], GetPaymentInformationCommand[SUCCESS][20ms], GetUserAccountCommand[SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][101ms], CreditCardCommand[SUCCESS][1075ms] Request => GetUserAccountCommand[FAILURE, FALLBACK_SUCCESS][2ms], GetPaymentInformationCommand[SUCCESS][22ms], GetUserAccountCommand[FAILURE, FALLBACK_SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][130ms], CreditCardCommand[SUCCESS][1050ms] Request => GetUserAccountCommand[FAILURE, FALLBACK_SUCCESS][4ms], GetPaymentInformationCommand[SUCCESS][19ms], GetUserAccountCommand[FAILURE, FALLBACK_SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][145ms], CreditCardCommand[SUCCESS][1301ms] Request => GetUserAccountCommand[SUCCESS][4ms], GetPaymentInformationCommand[SUCCESS][11ms], GetUserAccountCommand[SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][93ms], CreditCardCommand[SUCCESS][1409ms] ##################################################################################### # CreditCardCommand: Requests: 17 Errors: 0 (0%) Mean: 1171 75th: 1391 90th: 1470 99th: 1486 # GetOrderCommand: Requests: 21 Errors: 0 (0%) Mean: 100 75th: 144 90th: 207 99th: 230 # GetUserAccountCommand: Requests: 21 Errors: 4 (19%) Mean: 8 75th: 11 90th: 46 99th: 51 # GetPaymentInformationCommand: Requests: 21 Errors: 0 (0%) Mean: 18 75th: 21 90th: 24 99th: 25 ##################################################################################### Request => GetUserAccountCommand[SUCCESS][10ms], GetPaymentInformationCommand[SUCCESS][16ms], GetUserAccountCommand[SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][51ms], CreditCardCommand[SUCCESS][922ms] Request => GetUserAccountCommand[SUCCESS][12ms], GetPaymentInformationCommand[SUCCESS][12ms], GetUserAccountCommand[SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][68ms], CreditCardCommand[SUCCESS][1257ms] Request => GetUserAccountCommand[SUCCESS][10ms], GetPaymentInformationCommand[SUCCESS][11ms], GetUserAccountCommand[SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][78ms], CreditCardCommand[SUCCESS][1295ms] Request => GetUserAccountCommand[FAILURE, FALLBACK_SUCCESS][6ms], GetPaymentInformationCommand[SUCCESS][11ms], GetUserAccountCommand[FAILURE, FALLBACK_SUCCESS, RESPONSE_FROM_CACHE][0ms]x2, GetOrderCommand[SUCCESS][153ms], CreditCardCommand[SUCCESS][1321ms] ``` This demo simulates 4 different [HystrixCommand](https://github.com/Netflix/Hystrix/tree/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommand.java) implementations with failures, latency, timeouts and duplicate calls in a multi-threaded environment. It logs the results of [HystrixRequestLog](https://github.com/Netflix/Hystrix/tree/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixRequestLog.java) and metrics from [HystrixCommandMetrics](https://github.com/Netflix/Hystrix/tree/master/hystrix-core/src/main/java/com/netflix/hystrix/HystrixCommandMetrics.java). ## Dashboard A dashboard for monitoring applications using Hystrix is available in the [hystrix-dashboard](https://github.com/Netflix/Hystrix/tree/master/hystrix-dashboard) module. More information can be found on the [Dashboard Wiki](https://github.com/Netflix/Hystrix/wiki/Dashboard). ## Bugs and Feedback For bugs, questions and discussions please use the [GitHub Issues](https://github.com/Netflix/Hystrix/issues). ## LICENSE Copyright 2013 Netflix, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. [travis]:https://travis-ci.org/Netflix/Hystrix [travis img]:https://travis-ci.org/Netflix/Hystrix.svg?branch=master [maven]:http://search.maven.org/#search|gav|1|g:"com.netflix.hystrix"%20AND%20a:"hystrix-core" [maven img]:https://maven-badges.herokuapp.com/maven-central/com.netflix.hystrix/hystrix-core/badge.svg [release]:https://github.com/netflix/hystrix/releases [release img]:https://img.shields.io/github/release/netflix/hystrix.svg [license]:LICENSE-2.0.txt [license img]:https://img.shields.io/badge/License-Apache%202-blue.svg