SpringCloud极简入门-Feign开启Hystrix

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 1.支付服务集成Hystrix官方文档:https://cloud.spring.io/spring-cloud-static/Greenwich.SR5/single/spring-cloud.html#spring-cloud-feign-hystrix支付服务 springcloud-pay-server-1040 之前集成了Feign,修改该工程集成Hystrix。我们除了要给Feign开启Hystrix以外还需要为Feign接口编写托底类。

九.Feign开启Hystrix

在学习Feign的那一章节我们了解到Feign已经集成了Hystrix,但是在高版本关闭了Hystrix功能,我们这一章节就来学习在Feign里面如何使用Hystrix。

1.支付服务集成Hystrix

官方文档:https://cloud.spring.io/spring-cloud-static/Greenwich.SR5/single/spring-cloud.html#spring-cloud-feign-hystrix

支付服务 springcloud-pay-server-1040 之前集成了Feign,修改该工程集成Hystrix。我们除了要给Feign开启Hystrix以外还需要为Feign接口编写托底类。

1.1.开启Hystrix

通过feign.hystrix.enabled=true开启Hystrix

feign:  hystrix:    enabled: true #开启熔断支持ribbon:  ReadTimeout: 3000  SocketTimeout: 3000  ConnectTimeout: 3000hystrix:  command:    default:      execution:        isolation:          thread:            timeoutInMilliseconds: 10300

2.2.Fiegn接口熔断-fallback方式

服务通过Feign接口调用异常或超时需要触发降级,返回托底数据。这里有两种方式,分别是通过@FeignClient(fallback=…) ,以及@FeignClient(fallbackFactory=…) 来指定托底类,区别在于通过fallback的方式编写的托底是没办法打印出异常日志的 ,而fallbackFactory方式是可以打印出异常日志, 我们先来看第一种写法:

@FeignClient(value="user-server",fallback=UserFeignClientFallback.class)
publicinterfaceUserFeignClient {
//订单服务来调用这个方法      http://localhost:1020/user/10// @GetMapping(value = "/user/{id}" )@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
UsergetById(@PathVariable("id")Longid);
}

提示: fallback = UserFeignClientFallback.class : 该类是当前接口的实现类 ,也是托底数据所在的处理类

托底实现类:

//让Spring扫描到该托底类@ComponentpublicclassUserFeignClientFallbackimplementsUserFeignClient {
//日志打印器privateLoggerlog=LoggerFactory.getLogger(UserFeignClientFallback.class);
@OverridepublicUsergetById(Longid) {
log.info("用户服务不可用");
//托底数据returnnewUser(-1l,"无此用户","用户服务不可用");
    }
}

提示:注意,这里托底类需要交给Spirng管理,类上需要打 @Component 注解 , 拖地类需要实现 Feign接口,复写接口中的方法作为托底方法返回拖地数据。当Fiegn调用失败就会以拖地方法返回的结果返回给用户

启动测试

依次启动 springcloud-eureka-server-1010 , springcloud-user-server-1020, springcloud-pay-server-1030 , 访问:http://localhost:1040/pay/1 观察浏览器是否正常拿到结果,然后关闭 springcloud-user-server-1020工程观察浏览器是否返回托底数据。

这种方式及时触发托底了也看不到异常日志。

2.3.Fiegn接口熔断-fallbackFactory方式

使用fallbackFactory属性,使用工厂方式指定托底

//@FeignClient(value = "user-server",fallback = UserFeignClientFallback.class)@FeignClient(value="user-server",fallbackFactory=UserFeignClientFallbackFactory.class)
publicinterfaceUserFeignClient {
//订单服务来调用这个方法      http://localhost:1020/user/10// @GetMapping(value = "/user/{id}" )@RequestMapping(value="/user/{id}",method=RequestMethod.GET)
UsergetById(@PathVariable("id")Longid);
}

编写托底类

工程方式的托底类需要去实现 FallbackFactory接口 ,并指定泛型为“”Feign客户端接口(UserFeignClient )。FallbackFactory的create方法返回了Feign客户端接口的实例,该方法的throwable是参数是Feign调用失败的异常信息,如下:

//工厂方式的 , 托底类@ComponentpublicclassUserFeignClientFallbackFactoryimplementsFallbackFactory<UserFeignClient>{
//拖地方法 : throwable,异常@OverridepublicUserFeignClientcreate(Throwablethrowable) {
//返回UserFeignClient 接口的实例returnnewUserFeignClient() {
@OverridepublicUsergetById(Longid) {
//把异常信息打印到控制台throwable.printStackTrace();
//真正拖地方法 , 这里的数据是托底数据returnnewUser(-1L,"无此用户","用户服务不可用");
            }
        };
    }
}

启动测试

测试方式同上 ,只是这种方式触发托底是可以在控制台看到异常信息,方便我们调试。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
28天前
|
Dubbo Java 应用服务中间件
Dubbo学习圣经:从入门到精通 Dubbo3.0 + SpringCloud Alibaba 微服务基础框架
尼恩团队的15大技术圣经,旨在帮助开发者系统化、体系化地掌握核心技术,提升技术实力,从而在面试和工作中脱颖而出。本文介绍了如何使用Dubbo3.0与Spring Cloud Gateway进行整合,解决传统Dubbo架构缺乏HTTP入口的问题,实现高性能的微服务网关。
|
25天前
|
JSON Java 数据格式
【微服务】SpringCloud之Feign远程调用
本文介绍了使用Feign作为HTTP客户端替代RestTemplate进行远程调用的优势及具体使用方法。Feign通过声明式接口简化了HTTP请求的发送,提高了代码的可读性和维护性。文章详细描述了Feign的搭建步骤,包括引入依赖、添加注解、编写FeignClient接口和调用代码,并提供了自定义配置的示例,如修改日志级别等。
66 1
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
2月前
|
XML 监控 Java
Spring Cloud全解析:熔断之Hystrix简介
Hystrix 是由 Netflix 开源的延迟和容错库,用于提高分布式系统的弹性。它通过断路器模式、资源隔离、服务降级及限流等机制防止服务雪崩。Hystrix 基于命令模式,通过 `HystrixCommand` 封装对外部依赖的调用逻辑。断路器能在依赖服务故障时快速返回备选响应,避免长时间等待。此外,Hystrix 还提供了监控功能,能够实时监控运行指标和配置变化。依赖管理方面,可通过 `@EnableHystrix` 启用 Hystrix 支持,并配置全局或局部的降级策略。结合 Feign 可实现客户端的服务降级。
153 23
|
2月前
|
前端开发 API 微服务
SpringCloud微服务之间使用Feign调用不通情况举例
SpringCloud微服务之间使用Feign调用不通情况举例
465 2
|
2月前
|
Java 对象存储 开发者
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
故障隔离与容错处理:Hystrix在Spring Cloud和Netflix OSS中的应用
52 3
|
2月前
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
364 0
|
5月前
|
监控 Java 微服务
Spring Cloud 之 Hystrix
Spring Cloud Hystrix 是一个用于处理分布式系统延迟和容错的库,防止雪崩效应。它作为断路器,当服务故障时通过监控短路,返回备用响应,保持系统弹性。主要功能包括服务降级和熔断:
|
缓存 运维 监控
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
微服务技术系列教程(22) - SpringCloud- 服务保护机制Hystrix
106 0
|
5月前
springCloud之服务降级熔断Hystrix、OpenFeign
springCloud之服务降级熔断Hystrix、OpenFeign
325 0