SpringCloud--Hystrix实现服务熔断

导言

本篇文章将为大家讲解SpringCloud的-Hystrix,顾名思义,Hystrix就是为更好保护服务,实现断路器原来,当高并发时,可以给客户端返回一个有好的提示!就想春运抢骗时,会提示您排队中一样!
本文相比以前几篇内容多一些,还希望大家仔细阅读!
为更好理解本,您可以阅读往期,关于《SpringCloud》相关文章,进而了解项目的升级演变!

SpringCloud整合Hystrix

  1. consumer项目
<dependencies>
       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-web</artifactId>
       </dependency>

       <dependency>
           <groupId>org.springframework.boot</groupId>
           <artifactId>spring-boot-starter-test</artifactId>
           <scope>test</scope>
       </dependency>

       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
           <version>2.0.1.RELEASE</version>
       </dependency>
 <!-- SpringCloud 整合hystrix -->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
           <version>2.0.1.RELEASE</version>
       </dependency>
       <!-- SpringBoot整合fegnin客户端 -->
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-starter-openfeign</artifactId>
           <version>2.0.1.RELEASE</version>
       </dependency>
   </dependencies>

注: 因为order-api-server-impl项目内已经将consumer引用,所以无需更改

配置文件
#hystrix禁止服务超时时间
hystrix:
 command:
   default:
     execution:
       timeout:
         enabled: false

注:
此配置内容添加在order-api-server-impl内,当然您也可以不添加,这里只要是为了通过hystrix的超时时间来测试,我们也乐意用压力测试实现!
hystrix默认超时时间为1秒且默认开启,我们在代码内将进行阻塞为1.5秒,验证效果

业务代码
  1. 定义ConsumserFeign fallback
@FeignClient(value = "consumer",fallback = ConsumerFallback.class)
public interface ConsumserFeign extends IConsumerService {
}
  1. 定义ConsumerFallback
@Component
public class ConsumerFallback implements ConsumserFeign {

   public String getUserInfo() {
       return "服务正忙,请稍后再试!";
   }
}
  1. Order实现
@RestController
public class OrderServiceImpl {

   @Autowired
   private IConsumerService consumerService;
   
   //方案一: 通过@HystrixCommand注解,但是代码冗余
   /**
    *   fallbackMethod 方法的作用:服务降级执行
    *   @HystrixCommand 默认开启线程池隔离方式,服务降级,服务熔断
    *   设置Hystrix服务超时时间
     * @author Dylan Yang
     */
   @HystrixCommand(fallbackMethod = "orderToConsumerHystrixFallback")
   @GetMapping("/orderToConsumerHystrix")
   public String orderToConsumerHystrix() {
       System.out.println("orderToConsumerHystrix:" + "线程池名称:" + Thread.currentThread().getName());
       return consumerService.getUserInfo();
   }

   //此代码将大量出现在每一个服务内
   public String orderToConsumerHystrixFallback() {
       return "返回一个友好的提示:服务降级,服务器忙,请稍后重试!";
   }

   /**
     * 通过Feign实现,推荐使用
     *  将fallback 封装
     * @author Dylan Yang
     */
   @GetMapping("/orderToFeign")
   public String orderToFeign() {
       System.out.println("orderToFeign:" + "线程池名称:" + Thread.currentThread().getName());
       return consumerService.getUserInfo();
   }
}

注:
上面代码已经说明了实现熔断有两种方式,推荐第二种

效果演示
  1. 禁止服务超时的效果
    在这里插入图片描述
    接口可以访问
  2. 开启服务超时不做处理时的效果
    在这里插入图片描述
    服务超时,且无法访问,体验差
  3. 开启服务超时切做熔断处理
    在这里插入图片描述
    在这里插入图片描述

服务超时,但是可以访问,体验效果提升!
以上是两种方式,当然您可以根据您的喜好书写,但是小编还是推荐第二种!
这里有些绕,希望大家可以仔细阅读!
本文到此就实现了Feign客户端的调用,希望对正在学习的您有所帮助!不足之处还请大家包涵!下篇我们将讲述服务的容错!

小编寄语

小编创建了一个关于Java学习讨论的微信群!想进去的可以联系小编!同时也欢迎大家点赞与转发! 小编微信:372787553
备注为进群,通过后小编会邀请您进群! 大家也可以关注小编的微信公众号《Java有货》,里边有更多的资源!
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小杨同学~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值