feign整合hystrix开启hystrix后启动报错_SpringCloud极简入门|消费者中熔断机制Hystrix 实战经验篇第四讲...

本文介绍了如何在SpringCloud中使用Feign结合Hystrix实现服务熔断,防止服务雪崩效应。通过一个简单的Demo,展示了在服务调用异常或不可用时,如何启用Hystrix的熔断机制,返回友好的提示信息。同时,讨论了Hystrix配置中的熔断超时设置,并提供了详细的配置和测试过程。
摘要由CSDN通过智能技术生成
9998fe261d0d3fc5ec0b3cc51a23eff0.png

前情回顾

上章节我们讲了消费者调用生产者的两种方案。

调用过程中出现异常或者服务不可用怎么办呢?

管它呢,直接返回给客户错误信息....

这个?这个?这样做貌似不是一个合格程序员做的事情吧,我们应该遵循友好性原则,友情提示下。

那这就是本篇的主题FeignClient中使用熔断机制Hystrix进行服务熔断友情提示

小插曲

说来也惭愧,项目弄了3个月了刚开始也是集成了熔断机制的,可以SpringCloud一升级发现不起作用了,也就不用管这块,突然在整理本章内容的时候,发现了原因,现在共享给大家,希望有所帮助。(我们时共同进步的机制,所以有问题在下面发表你的看法,有问必有答)

概念扫盲

在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTemplate+Ribbon和Feign来调用。为了保证其高可用,单个服务通常会集群部署。由于网络原因或者自身的原因,服务并不能保证100%可用,如果单个服务出现问题,调用这个服务就会出现线程阻塞,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务之间的依赖性,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的“雪崩”效应。为了解决这个问题,业界提出了断路器模型。

Netflix开源了Hystrix组件,实现了断路器模式,SpringCloud对这一组件进行了整合。 在微服务架构中,一个请求需要调用多个服务是非常常见的

来张图

4f9717b789bf2bb3fd8ca004472dbfc6.png

​Demo开始

强大的springcloud-01-eureka-producer-consumer模块,没错,本章内容还是以这个模块为demo,已经很多章节都是以此模块讲解了,是不是有必要下载下源码呢?(文末共享)

97cc14ea63057751b4d2dd955a7107e3.png

​以下代码在消费者spring-cloud-consumer添加

首先是pom引入(和上章节一样,木变化)

我们用的是spring-cloud-starter-openfeign核心包

1512ea6a7a59adb57bee3471070d15af.png

接下就是Service层

看看和上篇有哪些变化

ae984861aa9c707eaca46332c86f3b13.png

发现有什么不同了吗?没错的,相信已经看到了,就这么简单加上fallbackFactory即可

fallbackFactory = HelloServiceFallbackFactory.class

然后HelloServiceFallbackFactory 实现FallbackFactory接口就ok了

HelloServiceFallbackFactory 类

81873f4b6dbdeef75981c178af148b02.png

注意点:加上注解@Component 不要忘记 ;然后实现每个方法的返回值就ok了

启动类 (也很关键)

39abfc9e1fc291e5d21c20156161b3d9.png

对的只需要加上@EnableFeignClients即可,但是这边有几个知识点,一定要要牢记,EnableFeignClients功能

1.支持Hystrix和他的fallback

2.支持ribbon 的负载均衡

3.启动时会进行包扫

Controller层

结束,为了本章完整性,在加一下controller吧(和上章木有变化)

e9aa16f5bb5dfb60a6cf5b9e8e6e808b.png

​启动项目开始测试

测试

访问controller结果返回,正确,收工?

b4e5ec578cf0811cecce106663a61d63.png

这就测试完成了?我们还忘了配置文件的配置吧,不是忘记了,是因为太重要了,我们放在这里讲解

配置文件(最后几项)

spring.application.name=spring-cloud-consumerserver.port=9001eureka.client.serviceUrl.defaultZone=http://localhost:7001/eureka/#开启熔断feign.hystrix.enabled=true#是否开启超时熔断, 如果为false, 则熔断机制只在服务不可用时开启hystrix.command.default.execution.timeout.enabled=true# 设置超时熔断时间hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

测试流程:关闭掉spring-cloud-provider模块的生产者,此时是没有服务的,消费者者访问理应触发熔断机制。

一:我们要是不开启熔断feign.hystrix.enabled,会有什么效果呢(如下图,还是会报错的,熔断没起作用)

fb9f206d87d3301bc3193fa0c1068e90.png

​二:feign.hystrix.enabled=true开启后

700dfcb92455707731cf4a64bdba8962.png

结论:熔断生效

至于最后熔断超时设置,验证就很简单了(启动消费者在生产者打上断点,消费者自然就超时了)

未打断点返回数据:hello spring-cloud zhangsan1

开始打断点:

c3d4927844d02183583ac5a8e458942a.png

​打上之后返回:连接超时,稍后重试

结论:超时设置生效

End

案例很简单,要学会动手实践,SpringCloud极简入门系列文章结束后,即将开启高级架构实战篇欢迎转发关注

有问题可随时@架构师速成记

源码:https://github.com/shinians/springcloud-demos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值