SpringCloud集成Hystrix熔断过程分步分解
版本:
SpringBoot 2.6.1
SpringCloud 2021.0.0
依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.1.6.RELEASE</version> </dependency>
贴@EnableHystrix注解
@EnableHystrix
@SpringBootApplication
public class ConsumerOneApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerOneApplication.class, args);
}
}
在需要熔断的接口上贴@HystrixCommand注解
@RequestMapping("/consumerOne")
@RestController
public class ControllerOne {
@Autowired
private RestTemplate restTemplate;
private String providerOneName = "provider-one";
@HystrixCommand(fallbackMethod = "fallbackMethodOne")
@RequestMapping("/serviceOne/{msg}")
public String serviceOne(@PathVariable("msg") String msg) {
return restTemplate.getForObject("http://" + providerOneName + "/providerOne/serviceOne/" + msg, String.class);
}
/** 熔断回调方法 */
private String fallbackMethodOne(String msg) {
return "熔断一默认返回:" + msg;
}
}异常熔断测试
其中一个服务方抛异常,另一服务方正常返回
@RequestMapping("/providerOne")
@RestController
public class ControllerOne {
@RequestMapping("/serviceOne/{msg}")
public String serviceOne(@PathVariable("msg") String msg) {
throw new RuntimeException();
// return "8702:" + msg;
}
}
@RequestMapping("/providerOne")
@RestController
public class ControllerOne {
@RequestMapping("/serviceOne/{msg}")
public String serviceOne(@PathVariable("msg") String msg) {
return "8701:" + msg;
}
}
访问结果:


超时熔断测试
全局
先配置默认超时时间为3秒(default为全局)
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
在这里插入代码片
其中一个接口睡眠4秒
@RequestMapping("/providerOne")
@RestController
public class ControllerOne {
@RequestMapping("/serviceOne/{msg}")
public String serviceOne(@PathVariable("msg") String msg) {
try {
Thread.sleep(4 * 1000);
return "8702:" + msg;
} catch (InterruptedException e) {
e.printStackTrace();
}
return "8702:" + msg;
}
}
访问结果:
当服务方为延时返回的那个时,访问等待了3秒返回熔断默认对象
另一个正常
单个接口
除了全局外,另外给serviceTwo接口配置独立的超时时间,其余不变
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000
serviceTwo:
execution:
isolation:
thread:
timeoutInMilliseconds: 5000
增加一个路径为serviceTwo的接口
@RequestMapping("/consumerOne")
@RestController
public class ControllerOne {
@Autowired
private RestTemplate restTemplate;
private String providerOneName = "provider-one";
@HystrixCommand(fallbackMethod = "fallbackMethodOne")
@RequestMapping("/serviceOne/{msg}")
public String serviceOne(@PathVariable("msg") String msg) {
return restTemplate.getForObject("http://" + providerOneName + "/providerOne/serviceOne/" + msg, String.class);
}
@HystrixCommand(fallbackMethod = "fallbackMethodOne")
@RequestMapping("/serviceTwo/{msg}")
public String serviceTwo(@PathVariable("msg") String msg) {
return restTemplate.getForObject("http://" + providerOneName + "/providerOne/serviceOne/" + msg, String.class);
}
private String fallbackMethodOne(String msg) {
return "熔断一默认返回:" + msg;
}
}测试结果:
一个为等待5秒返回结果
一个正常返回
到此这篇关于SpringCloud集成Hystrix熔断过程分步分解的文章就介绍到这了,更多相关SpringCloud Hystrix熔断内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java中注解@JsonFormat与@DateTimeFormat的使用
从数据库获取时间传到前端进行展示的时候,我们有时候可能无法得到一个满意的时间格式的时间日期,本文主要介绍了Java中注解@JsonFormat与@DateTimeFormat的使用,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧2023-08-08
SpringBoot+shardingsphere实现按月分表功能教程
这篇文章主要介绍了SpringBoot+shardingsphere实现按月分表功能教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04
Spring Data JPA 如何使用QueryDsl查询并分页
这篇文章主要介绍了Spring Data JPA 如何使用QueryDsl查询并分页,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-11-11
Mybatis-Plus的条件构造器QueryWrapper & UpdateWrapper示例详解
Mybatis-Plus的条件构造器QueryWrapper和UpdateWrapper为开发者提供了强大、灵活的条件构建工具,能够大大简化数据库操作的代码,通过本文的介绍,读者可以更加深入地理解这两个条件构造器的使用方法,并在实际项目中灵活应用,感兴趣的朋友跟随小编一起看看吧2024-01-01


最新评论