Hystrix豪猪哥(中)

Posted 人可资讯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hystrix豪猪哥(中)相关的知识,希望对你有一定的参考价值。

优质文章,及时送达
感谢技术+视频支持-阳哥

承接上文      

10. Hystrix断路器

高并发测试

上述的 hystrix8001 在非该并发情形下,还能勉强满足  ,现在,来测高并发的情况


Jmeter压测测试

  • 开启Jmeter,来20000个并发压死8001,2000个请求都去访问paymentInfo_TimeOut请求

    • 这是Jmeter的一篇安装教程  https://zhuanlan.zhihu.com/p/31708012      可以不看的

    • 官网下载并解压 https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/source/apache-jmeter-5.2.1_src.zip

    • 进入bin目录,cmd

    Hystrix豪猪哥(中)

    • 运行jar包  

    Hystrix豪猪哥(中)

    • 右键添加线程组

    Hystrix豪猪哥(中)

    • 参数实例     200个线程数 循环100次,  一共20000个请求,模拟高并发

      最好是保存一下,默认保存到bin目录下

    Hystrix豪猪哥(中)

    • 添加http请求

    Hystrix豪猪哥(中)

    • 具体参数,   记得保存一下

    Hystrix豪猪哥(中)

    • 点击启动

    Hystrix豪猪哥(中)

  • 再来访问

    • localhost:8001/payment/hystrix/ok/1

    • localhost:8001/payment/hystrix/timeout/1

  • 看演示结果

    • 两个都开始转圈了

    • 为什么ok的那个也会被卡死 ,因为tomcat的默认工作线程数被打满了,没有多余的线程来分解压力和处理别的服务了,所以 即便是没有转圈的ok,也变慢了。

Jmeter压测结论

  • 上面还是服务提供者8001自己测试,就卡死了, 必须配置服务降级.

    假如此时外部的消费者80也来访问,那消费者只能干等,最终导致消费端80不满意,服务端8001直接被拖死。



看热闹不嫌事大, 80 新建加入

  • 新建module    cloud-consumer-feign-hystrix-order80

  • POM

     <dependencies>
        <!--openfeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!--hystrix-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <!--eureka client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <dependency>
            <groupId>com.woxueit.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--一般基础通用配置-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
     </dependencies>
  • YML

     server:
      port: 80
     
     eureka:
      client:
        register-with-eureka: false
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka/
     
  • 主启动  OrderHystrixMain80

     @SpringBootApplication
     @EnableFeignClients     //先激活feign
  • 业务类

    • PaymentHystrixService     ------------>>>>因为还要用feign,是通过接口+@FeignClient调用的

       package com.woxueit.springcloud.service;
       
       @Component
       @FeignClient(value = "CLOUD-PROVIDER-HYSTRIX-PAYMENT")
       public interface PaymentHystrixService
       {
           @GetMapping("/payment/hystrix/ok/{id}")
           public String paymentInfo_OK(@PathVariable("id") Integer id);
       
           @GetMapping("/payment/hystrix/timeout/{id}")
           public String paymentInfo_TimeOut(@PathVariable("id") Integer id);
       }
       
    • OrderHystrixController

       package com.woxueit.springcloud.controller;
       
       @RestController
       @Slf4j
       
       public class OrderHystirxController
       {
           @Resource
           private PaymentHystrixService paymentHystrixService;
       
           @GetMapping("/consumer/payment/hystrix/ok/{id}")
           public String paymentInfo_OK(@PathVariable("id") Integer id)
          {
               String result = paymentHystrixService.paymentInfo_OK(id);
               return result;
          }
           
           @GetMapping("/consumer/payment/hystrix/timeout/{id}")
           public String paymentInfo_TimeOut(@PathVariable("id") Integer id)
          {
               String result = paymentHystrixService.paymentInfo_TimeOut(id);
               return result;
          }
       
       }
       
  • 正常测试

  • 正常测试 --------->>>>8001自测没问题, 80调用也没有问题

    localhost/consumer/payment/hystrix/ok/2       ----->没问题,秒出

    localhost/consumer/payment/hystrix/timeout/1    ----->>>这个肯定会报错,因为80用的是Feign调用,默认时间是1秒,                                                                                          这个业务要3秒,会报超时错误的

    以上是关于Hystrix豪猪哥(中)的主要内容,如果未能解决你的问题,请参考以下文章

    Hystrix详解

    Hystrix入门指南

    Hystrix入门指南

    Hystrix在工作中你至少需要知道的!--Ⅰ

    分布式服务防雪崩熔断器,Hystrix理论+实战。

    小白使用Hystrix