美文网首页
spring cloud实战:3-熔断器Hystrix

spring cloud实战:3-熔断器Hystrix

作者: jyjack | 来源:发表于2019-07-29 22:20 被阅读0次

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

准备工作

请先按照 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

相关文章

网友评论

      本文标题:spring cloud实战:3-熔断器Hystrix

      本文链接:https://www.haomeiwen.com/subject/wjzirctx.html