spring cloud实战:3-熔断器Hystrix

如果您认为对你有帮助,请点个赞!

准备工作

请先按照 spring cloud实战:1- 服务注册中心Eureka 完成准备工作,具体包括:

  • Eureka服务(服务注册中心):eureka_server
  • 服务提供方:provider
  • 服务消费者:consumer
    三者的关系是:consumer会通过服务注册中心调用外部服务provider

熔断器原理概述

熔断器是服务消费者(consumer)与服务提供者(provider
)之间的一个开关,当此开关关闭时(即没有熔断),consumer的调用请求会发给provider处理。

如果请求调用失败的比例达到阀值时(表示provider
负载过高),熔断器会自动打开,这样consumer人请求就不会发给provider处理,避免provider负载过高。

熔断器关闭达到指定时间后,会半开,即转发一个请求,若成功则关闭熔断器,若失败则继续打开。

实战

本实战是在 spring cloud实战:1- 服务注册中心Eureka 的基础上进行。

由于熔断器是通过对服务调用的成功率,决定是否熔断,实际上是对后端服务提供过载保护。但熔断器的控制逻辑是在调用端。因此要启用熔断器,需要在consumer端进行处理。

因此需要对 eureka _consumer 项目模块进行修改。

启用熔断器

在application.properties文件中,启用熔断器,配置如下:

### 启用熔断器
feign.hystrix.enabled=true

fallback实现类

在spring cloud实战:1- 服务注册中心Eureka中,我们定义了 **** 接口,但并未实现。
在这里我们将实现该接口,该实现类将在服务端熔断后被自动调用
新建FeignSayHelloFallback.java类,并实现IFeignSayHello接口,代码如下:

package com.example.eureka.consumer;

import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestParam;

@Component
public class FeignSayHelloFallback implements IFeignSayHello {
    @Override
    public String sayHello(@RequestParam(value = "name") String name) {
        return "熔断保护已开启!";
    }
}

启用fallback

在IFeignSayHello接口中,添加fallback属性指定fallback实现类

//在FeignClient注解中,添加fallback属性指定fallback实现类
@FeignClient(name = "spring-cloud-produce-say-hello",fallback = FeignSayHelloFallback.class)  

测试熔断

将 eureka_server、eureka_provider、eureka_consumer都启动起来。这时用浏览器访问consumer的REST服务,可以正常运行。
然后我们将eureka_provider人工停止,再次访问consumer的REST服务,这时服务会被熔断,界面如下:


熔断fallback

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容