Hystrix
大约 2 分钟
What's Hystrix?
相关信息
Hystrix 熔断器是由网飞开源的服务熔断组件。
在分布式环境中,某个服务可能因为不可抗力的因素挂掉,此时调用这个挂掉的服务的另一个服务可能就会产生故障,因为等不到响应一直等待或因为调用失败反复调用,那么容器中的线程数量则会持续增加直致CPU资源耗尽,导致另一个服务不可用,即服务的级联故障,可能导致服务雪崩。
通过线程池隔离、信号量隔离、熔断、降级回退的方式,来控制分布式服务之间的交互。隔离服务之间的访问点、阻止它们之间的级联故障,并提供回退选项来实现这一点,提高系统的整体弹性。
熔断:当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时,为了防止整个系统的故障,而采用了一些保护措施。
降级:服务器压力剧增的时候,根据当前业务情况及流量,对一些服务和页面进行有策略的降级。以此缓解服务器资源的的压力,以保证核心业务的正常运行,同时也保持了客户和大部分客户的得到正确的相应。(主逻辑失败采用备用逻辑)
使用Hystrix
- 导入相关依赖。
- 服务消费者在启动类上添加注解
@EnableCircuitBreaker
. - 配置Hystrix.
- 开启 Feign 支持 Hystrix.
- 为接口增加一个备用逻辑实现类。
- 为接口添加注解参数
@FeignClient(name = "points-server",fallback = PointServiceAPIFallbackImpl.class)
. - 可以调用短信接口通知对应服务出现问题,或者通过 redis 或本地日志的形式把对应的数据做托底处理。
<!--熔断器Hystrix相关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
# 开启feign支持hystrix
feign:
hystrix:
enabled: true
#熔断器超时
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 5000
import com.ly.api.PointsAPI;
import com.ly.pojo.Points;
import java.util.HashMap;
import java.util.Map;
public class PointServiceAPIFallbackImpl implements PointsAPI {
@Override
public Map<String, Object> addPoints(Points points) {
//回退处理
System.out.println("回退业务逻辑");
Map<String,Object> map = new HashMap<>();
map.put("error","error");
return map;
}
}