作者:佳君旭博21 | 来源:互联网 | 2023-09-18 15:41
本文主要介绍关于java,springcloud的知识点,对【Hystrix的降级与熔断测试】和【hystrix熔断与降级默认参数】有兴趣的朋友可以看下由【晴天ly】投稿的技术文章,希望该技术和经验
本文主要介绍关于java,spring cloud的知识点,对【Hystrix的降级与熔断测试】和【hystrix熔断与降级默认参数】有兴趣的朋友可以看下由【晴天ly】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的【SpringCloud,Java】相关技术问题。
hystrix熔断与降级默认参数
Hystrix的降级与熔断测试 构建服务Eureka Server注册中心服务生产者服务消费者Hystrix监控服务 测试测试方案预期目标开始测试
构建服务
为了测试Hystrix的降级与熔断功能,此处构建了Eureka Server注册中心服务、Eureka Client的生产者和消费者两个服务、Hystrix Dashboard服务监控平台,总共四个服务。
Eureka Server注册中心
这里可以参考我之前写的一篇文章:https://blog.csdn.net/m0_43420705/article/details/111763158
通过这篇教程即可构建出Eureka Server注册中心。
服务生产者
新建一个springboot项目为其添加控制层向外提供一个接口:
@RestController
@RequestMapping("/")
public class ProducerController {
@GetMapping("/getinfo")
public String getInfo() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "方法正常执行";
}
}
当访问此接口时会延迟5秒钟返回结果,以此来测试消费者端服务调用的超时然后降级或熔断的情况。
服务消费者
新建一个springboot项目为其添加控制层向外提供接口:
@RestController
@RequestMapping("/")
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/get1")
@HystrixCommand(
threadPoolKey = "test1ThreadPool",
threadPoolProperties = {
@HystrixProperty(name = "coreSize", value = "3"),
@HystrixProperty(name = "maxQueueSize", value = "100")
},
fallbackMethod = "testFallback1",
commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1000"),
@HystrixProperty(name = "metrics.rollingStats.timeInMilliseconds", value = "10000"),
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "4"),
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000")
}
)
public String test1() {
return restTemplate.getForObject("http://eureka-client-producer/getinfo", String.class);
}
public String testFallback1() {
return "降级方案1";
}
}
这里添加了一个test1()接口和其对应的testFallback1()降级方法,通过在接口方法上添加@HystrixCommand注解表明该方法可进行熔断和服务降级,注解中的参数可实现细节的配置,具体所用到的每个参数所对应的功能都在上面代码注释中写出了。
Hystrix监控服务
再新建一个springboot项目,其pom.xml文件中所需依赖如下:
<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.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
在application.yml配置文件中添加如下配置:
spring:
application:
name: hystrix-dashboard-server
server:
port: 8204
eureka:
client:
service-url.defaultZone: http://alee:123456@{
Eureka注册中心IP}:{
端口}/eureka/
register-with-eureka: true
fetch-registry: true
instance:
prefer-ip-address: true
instance-id: ${spring.application.name}:${spring.cloud.client.ip-address}:${server.port}
hystrix:
dashboard:
proxy-stream-allow-list: "localhost"
最后在启动类上加上@EnableHystrixDashboard注解以使用Hystrix监控仪表盘。
测试 测试方案
这里使用Postman测试工具进行测试,然后通过观察Hystrix Dashboard仪表盘的变化判断测试是否成功。
预期目标
通过观察消费者服务的test1()接口的HystrixCommand配置可知,每次发送请求去调用该接口程序一定会超时,所以当最开始服务未熔断时在10秒钟之内发送4个请求后服务就会熔断,然后在每个5秒钟内连续发多个请求的话,第一个请求会显示超时,剩下的请求会显示短路。
开始测试
在Postman中新建一个请求:
在Collection Runner中选择该请求并发4次:
点击Run测试接口按钮可以看到执行第三个请求后服务并未熔断,在第四个请求完之后服务被熔断:
现在服务已熔断的情况下再次发送10个请求测试:
可以看到第一个请求结果是超时,后面9个是短路,因为熔断之后每隔5秒钟的第一个请求依然会去调用test1()接口,而这5秒钟里剩余的请求不会去调用test1()接口,而是直接调用降级方法,并且请求结果会显示短路。
测试完成。
本文《Hystrix的降级与熔断测试》版权归晴天ly所有,引用Hystrix的降级与熔断测试需遵循CC 4.0 BY-SA版权协议。