1. 程式人生 > >Hystrix熔斷器原理、應用

Hystrix熔斷器原理、應用

熔斷器用於解決雪崩問題:
什麼是雪崩問題?

解決方案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);
    }
}

訪問,擁擠情況如下:
1
不擁擠情況如下:
567

原始碼分享:
https://github.com/medoo-Ai/cloud-demo1