SpringCloud服務保護機制Hystrix

源於螞蟻課堂的學習,點擊這裏查看(老餘很給力) 

服務雪崩

高併發情況下,大量的請求堆積在一個服務上,超過服務線程池(默認爲tomcat自帶的線程池)處理的最大線程數,導致其他服務沒有
線程進行接受請求

服務降級

對於等待線程處理的請求,返回一個友好的提示(如:當前訪問人數太多,或有多少人排隊等)。防止用戶一直等待(調用fallBack方法)

服務熔斷

對併發請求的數量設置一個閾值,超過閾值就會拒絕訪問,對請求執行服務的降級。

服務隔離機制

默認情況下,只有一個線程池會維護所有的服務接口,如果大量的請求訪問同一個接口,達到tomcat 線程池默認極限,可能會導致其他
服務無法訪問,將高併發的接口使用額外的線程池去實現線程數量的擴容處理,接口之間的併發互不影響

服務限流

對接口訪問進行限制,常用服務限流算法令牌桶、漏桶。計數器也可以進行粗暴限流實現。

 Hystrix環境搭建

maven 

<!-- hystrix斷路器 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

 開啓Hystrix斷路器

feign:
  hystrix:
    enabled: true
    
#### hystrix禁止服務超時時間
hystrix:  
 command: 
   default: 
      execution: 
       timeout: 
        enabled: false

 啓動

@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
@EnableHystrix
public class OrderServiceApp{
	public static void main(String[] args) {
		SpringApplication.run(OrderServiceApp.class, args);
	}

}

 服務降級處理

    @RequestMapping("/hystrix")
    @HystrixCommand(fallbackMethod = "waitReq")
    public String hystrix(){
        System.out.println("hystrix:" + Thread.currentThread().getName());
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "服務保護機制";
    }


    // 友好提示
    public String waitReq(){
        return "馬哥在忙,等一下";
    }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章