Hystrix熔斷器原理、應用
阿新 • • 發佈:2018-11-30
熔斷器用於解決雪崩問題:
什麼是雪崩問題?
解決方案2種;
1、熔斷
2、服務降級
熔斷器的應用場景:
控制使用者精確訪問,譬如VIP 賬號訪問資源的等等、許可權控制;
原始碼分享:
https://github.com/medoo-Ai/cloud-demo1
1、consumer 消費者中新增依賴:
2、在main 函式中新增 @EnableCircuitBreaker // 新增Hystrix 的註解;
由於consumer消費者主函式上註解較多,使用@SpringCloudApplication 代替組合註解,
@SpringCloudApplication原始碼如下:
/**
* @author Spencer Gibb
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {
}
<!-- 熔斷器-->
<dependency>
<groupId>org.springframework.cloud</ groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
3、yml檔案中配置熔斷的預設時間 2s:
server:
port: 8080
spring:
application:
name: consumer-demo
eureka: # eureka服務發現
client:
service-url:
defaultZone: http://127.0.0.1: 10086/eureka
registry-fetch-interval-seconds: 10 # 預設的 服務消費每個30s 更新資料到本地
instance:
instance-id: ${spring.application.name}:${server.port}
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 2000 # 設定預設2s
controller 中進行熔斷提示:
@RestController
@RequestMapping("consumer")
@DefaultProperties(defaultFallback = "getFallBack") //指定統一的服務降級的方法
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
@HystrixCommand
@GetMapping("{id}")
public String get(@PathVariable("id") Long id) {
String url = "http://user-service/user/" + id;
return restTemplate.getForObject(url, String.class);
}
public String getFallBack() {
return "網路太擁擠了"; // 預設訪問時長1s ,可以設定配置為2s
}
}
主函式如下:
@SpringCloudApplication
public class ConsumerApplication {
@Bean
@LoadBalanced //新增負載均衡
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class,args);
}
}
訪問,擁擠情況如下:
不擁擠情況如下: