SpringCloud学习六:Hystrix
发布日期:2021-05-06 22:11:18 浏览次数:41 分类:精选文章

本文共 3672 字,大约阅读时间需要 12 分钟。

 

一、整框架结构

二、springcloud整合hystrix

2.1、order服务中引入依赖(加载最外层的pom.xml)

org.springframework.cloud
spring-cloud-starter-hystrix
com.netflix.hystrix
hystrix-javanica
RELEASE

2.2、主配置类添加注解

@EnableHystrix或@EnableCircuitBreaker

2.3、配置文件yml中开启hystrix(必须开启)                     否则hystrix会走熔断路线←←←这句话有问题、、、、、

注:

feign:     hystrix:         enabled: true

2.4、需要熔断的方法中添加注解

注:orderToMember方法为调用方法(用户请求的),hystrixResult方法为熔断、隔离、降级后的响应方法

不需要熔断的方法        @Override    public Object getOrder(String orderName) {        System.out.println("getOrder当前访问线程池"+Thread.currentThread().getName());        Order order = new Order();        order.setOrderName(orderName);        order.setStatus("1");        order.setStock("1000");        order.setAttributeList("规格");        return order;    }    //需要熔断-在member会员项目中线程设置了sleep延时1.5秒    @Override    @HystrixCommand(fallbackMethod = "hystrixResult")    public Object orderToMember(String name) {        System.out.println("orderToMember当前访问线程池"+Thread.currentThread().getName());        return orderToMemberServiceFeign.getUser(name);    }    //熔断返回的数据    public Map
hystrixResult(String id) { System.out.println("熔断器启动"); HashMap
hashMap = new HashMap(); hashMap.put("error", "熔断器启动后快速返回结果给客户端的内容" + id); return hashMap; }

结果

2.5、如果会员服务设置的thread.sleep(1500),默认情况下用户端最大等待时间区间在1秒,这种情况下用户会收到降级消息;只要在yml中配置hystrix.command.default.execution.timeout.enabled=false 即可正常(执行是否启用超时,默认启用true),但是我这里测试了报黄,求告知原因

正式项目不能禁用-默认开启为true,(应该会有个设置超时时间的参数)

 

三、定义统一fallback接口

3.1、在的搭建基础上加入以下配置(只要配置order服务)

3.2、新增一个类

3.3、MemberServiceFallback类

    3.3.1、创建MemberServiceFallback类,实现OrderToMemberServiceFeign类,

    3.3.2、添加@Component注解

    3.3.3、并添加返回提示代码,如下

@Componentpublic class MemberServiceFallback implements OrderToMemberServiceFeign {    @Override    public Object getUser(String name) {        System.out.println("开启Fallback");        HashMap
hashMap = new HashMap(); hashMap.put("error", "服务器忙!请稍后重试!!!" + name); return hashMap; }}

3.4、OrderToMemberServiceFeign类中也需要在@FeignClient注解中添加   , fallback = MemberServiceFallback.class 

3.5、service层,orderToMemberFallback方法测试统一fallback接口是否生效

@Override    public Object getOrder(String orderName) {        System.out.println("getOrder当前访问线程池"+Thread.currentThread().getName());        Order order = new Order();        order.setOrderName(orderName);        order.setStatus("1");        order.setStock("1000");        order.setAttributeList("规格");        return order;    }    //hystrix注解的优先级比orderToMemberFallback方法更高    @Override    @HystrixCommand(fallbackMethod = "hystrixResult")    public Object orderToMember(String name) {        System.out.println("orderToMember当前访问线程池"+Thread.currentThread().getName());        return orderToMemberServiceFeign.getUser(name);    }    public Map
hystrixResult(String name) { System.out.println("熔断器启动"); HashMap
hashMap = new HashMap(); hashMap.put("error", "熔断器启动后快速返回结果给客户端的内容" + name); return hashMap; } //定义统一fallback接口 public Object orderToMemberFallback(String name) { System.out.println("orderToMemberFallback当前访问线程池"+Thread.currentThread().getName()); return orderToMemberServiceFeign.getUser(name); }

3.6、测试

    3.6.1、分别访问controller层的getOrder(直接调用本服务)、orderToMember(调用member服务—hystrix注解)、orderToMemberFallback(调用member服务——fallback接口、方法(对应service层)

    3.6.2、访问结果

    3.6.3、然后看下线程

    3.6.4、分析:

        1、看第二种(开启hystrix注解版)不仅走的注解,也走了接口,会开启一个新的线程

        2、第三种(开启hystrix接口版)正常返回提示,使用同一个线程

        3、注解优先级高于接口

 

 

 

 

 

二、原理

2.1、介绍hystrix

 

2.2、雪崩效应

雪崩效应解决方法

a.服务降级(给客户另一个页面)
b.服务隔离
c.服务熔断

 

 

 

参考链接:

抄抄抄你妹的  

这个好  

上一篇:SpringCloud学习七:config 配置中心
下一篇:SpringCloud学习五:feign

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月19日 12时42分35秒