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
运行jar包
右键添加线程组
参数实例 200个线程数 循环100次, 一共20000个请求,模拟高并发
最好是保存一下,默认保存到bin目录下
添加http请求
具体参数, 记得保存一下
点击启动
再来访问
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豪猪哥(中)的主要内容,如果未能解决你的问题,请参考以下文章