Spring cloud Hystrix 服务容错保护

在微服务架构中,存在着那么多的单元,若一个单元初夏故障,就很容易因依赖关系而引发故障的蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构更加不稳定,为了解决这样的问题,产生了断路器等一系列的服务保护机制

“断路器”本身是一种开关装置,用于在电路上保护线路过载,当线路中有电器发生短路中时,“断路器”能够及时切断故障电路,防止发生过载,发热设置起火等严重后果。

在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器放生短路)之后,通过断路器的故障监控(类似熔断保险丝),像调用方返回一个错误响应,而不是漫长的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。


Spring Cloud Hystrix实现了断路器、线程隔离等一系列服务保护功能。他也是基于Netflix的开源框架Hystrix实现的,该框架的目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。Hystrix具备服务降级服务熔断线程和信号隔离请求缓存请求合并以及服务监控等强大功能。

在main方法中加注解

/**
 * 开启断路器功能
 */
@EnableCircuitBreaker
@HystrixCommand
public String helloService(){
    return restTemplate.getForEntity("http://hello-server/hello",String.class).getBody();
}

在调用方法时加注解@HystrixCommand(fallbackMethod = "helloFallback")【参数为调用方法】。@HystrixCommand注解可以优雅的定义Hystrix命令的实现,但是如上定义的方法helloService()只是同步执行的实现,若要实现异步执行则还需另外定义,比如:

@HystrixCommand
public Future<String> asnyc(){
    return new com.netflix.hystrix.contrib.javanica.command.AsyncResult<String>() {
        @Override
        public String invoke() {
            return restTemplate.getForEntity("http://hello-server/hello",String.class).getBody();
        }
    };

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值