熔断器本身是一个开关设置,当某个服务单元发生故障之后,通过熔断器的故障监控(类似保险丝),向调用方返回一个服务预期的,可处理的备选相应(fallBack),而不是长时间的等待或者抛出调用方法无法处理的异常。这样就保证了服务调用方的线程不会长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。
引入jar包;
org.springframework.cloud
spring-cloud-starter-hystrix
1.4.6.RELEASE
在启动类上开启断路器。
@SpringBootApplication
@EnableEurekaClient // 表示是eureka的客户端
@EnableFeignClients
@EnableDiscoveryClient // 提供服务发现
@EnableCircuitBreaker // 开启hystrix断路器
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
/**
* 远程调用
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* feign的日志通过代码的方式(也可以通过yml配置文件的方式)
*/
@Bean
public Logger.Level feignLogger() {
return Logger.Level.FULL;
}
}
单个回滚方法:
/**
* Hystrix实例:单个回滚
* @author Big.Hu
*/
@RestController
public class UserController {
/**
* 熔断机制
* 异常后执行getFeignFallback()方法
*/
@HystrixCommand(fallbackMethod = "getFeignFallback")
@GetMapping("feign/{id}")
public String getFeign(@PathVariable("id") int id) {
int i = 1 / 0; // 异常
return userFeign.getOrder1(id);
}
private String getFeignFallback(@PathVariable("id") int id) {
System.out.println("断路器生效。");
return "提示:网络繁忙,请稍候再试。。" + id;
}
}
访问请求:localhost:7001/feign/555。
断路器生效
控制台:
全局的回滚方法:
/**
* Hystrix实例:全局回滚
* @author Big.Hu
*/
@RestController
@DefaultProperties(defaultFallback = "defaultFallback")
public class UserController {
@GetMapping("feign/{id}")
public String getFeign(@PathVariable("id") int id) {
int i = 1 / 0; // 异常
return userFeign.getOrder1(id);
}
private String defaultFallback() {
System.out.println("全局断路器生效。");
return "提示:服务器繁忙,请稍候再试。。";
}
}
访问请求:localhost:7001/feign/555。
全局断路器生效
控制台:
控制台
网页名称:SpringCloud系列之Hystrix熔断器
本文路径:http://www.shufengxianlan.com/qtweb/news36/363986.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联