掃二維碼與項(xiàng)目經(jīng)理溝通
我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
熔斷器本身是一個(gè)開關(guān)設(shè)置,當(dāng)某個(gè)服務(wù)單元發(fā)生故障之后,通過熔斷器的故障監(jiān)控(類似保險(xiǎn)絲),向調(diào)用方返回一個(gè)服務(wù)預(yù)期的,可處理的備選相應(yīng)(fallBack),而不是長時(shí)間的等待或者拋出調(diào)用方法無法處理的異常。這樣就保證了服務(wù)調(diào)用方的線程不會(huì)長時(shí)間,不必要的占用,從而避免了故障在分布式系統(tǒng)中的蔓延,乃至雪崩。

引入jar包;
org.springframework.cloud
spring-cloud-starter-hystrix
1.4.6.RELEASE
在啟動(dòng)類上開啟斷路器。
@SpringBootApplication
@EnableEurekaClient // 表示是eureka的客戶端
@EnableFeignClients
@EnableDiscoveryClient // 提供服務(wù)發(fā)現(xiàn)
@EnableCircuitBreaker // 開啟hystrix斷路器
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
/**
* 遠(yuǎn)程調(diào)用
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
/**
* feign的日志通過代碼的方式(也可以通過yml配置文件的方式)
*/
@Bean
public Logger.Level feignLogger() {
return Logger.Level.FULL;
}
}
單個(gè)回滾方法:
/**
* Hystrix實(shí)例:單個(gè)回滾
* @author Big.Hu
*/
@RestController
public class UserController {
/**
* 熔斷機(jī)制
* 異常后執(zhí)行g(shù)etFeignFallback()方法
*/
@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 "提示:網(wǎng)絡(luò)繁忙,請稍候再試。。" + id;
}
}
訪問請求:localhost:7001/feign/555。
斷路器生效
控制臺(tái):
全局的回滾方法:
/**
* Hystrix實(shí)例:全局回滾
* @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("全局?jǐn)嗦菲魃А?);
return "提示:服務(wù)器繁忙,請稍候再試。。";
}
}
訪問請求:localhost:7001/feign/555。
全局?jǐn)嗦菲魃?/p>
控制臺(tái):
控制臺(tái)

我們在微信上24小時(shí)期待你的聲音
解答本文疑問/技術(shù)咨詢/運(yùn)營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流