Day06 學習SpringCloud中的Hystrix熔斷器

Hystrix熔斷器

我們學習微服務就是將一個個的模塊拆分爲一個個的服務 , 如下 , c和d服務調用後B服務,B服務調用A服務
圖如下 :
在這裏插入圖片描述
    我們從圖中不難發現 , 當A服務出現問題的時候 導致B服務也不可用 , 可能會發生級聯傳遞,導致整個服務鏈上的服務不可用 ,隨即整個服務就崩潰了!當一個系統劃分的模塊越多,這種故障發生的頻率就會越高, 對於這個問題,Spring Cloud中最重要的解決方案就是斷路器,那麼本文我們就來看看什麼是斷路器。

    首先將以前的user , order 和Eureka Server 服務啓動,將order服務啓動兩份 , 端口分別是8002和8003 , eureka截圖如下:
在這裏插入圖片描述
此時我們隨便訪問一個接口可以看到下圖
在這裏插入圖片描述
, 立即關閉一個order服務刷新兩遍一定會出現
在這裏插入圖片描述
這是因爲ribbon的負載均衡機制是默認是輪詢 , 顧名思義就是來回切換 ,所以當一個服務提供者關掉之後,刷新的時候服務請求成功和請求失敗是成對出現的:當服務消費者去請求那個被關掉的服務提供者的時候就會請求失敗,當服務消費者去請求正常的服務提供者時就能獲得期望的結果。請求失敗時不能給用戶展示這樣一個ErrorPage,而應該是一個可控的頁面,OK,我們來看看如何使用斷路器來解決這個問題。

  1. 服務消費者中加入斷路器jart(user)
<dependency>
			<!-- hystrix的啓動包 -->
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
  1. user啓動類加上註解@EnableCircuitBreaker , 表示 開啓斷路器功能
    在這裏插入圖片描述
  2. 創建HystrixService類
/**
 * @ClassName: HystrixService
 * @Description:
 * @author: 田曉斌
 * @date: 2019年4月22日 下午7:00:42
 */
@Service
public class HystrixService {

	@Autowired
	private RestTemplate restTemplate;

	/*
	 * @HystrixCommand註解來指定請求失敗時回調的方法
	 */
	@HystrixCommand(fallbackMethod = "error")
	public String findOrderByUser(String id) {
		Integer oid = 123;
		return this.restTemplate.getForObject("http://springcloud-eureka-order/order/" + oid, String.class);
	}

	/*
	 * error()方法是一個請求失敗時回調的方法。
	 */
	public String error(String id) {
		return "error";
	}
}
  • Controller代碼
/**
 * @ClassName:  HystrixController   
 * @Description: 
 * @author: 田曉斌
 * @date:   2019年4月22日 下午7:01:59
 */
@RestController
public class HystrixController {

	@Autowired
	private HystrixService hystrixService;

	@GetMapping(value = "/hystrix/findOrder/{id}")
	public String helloController(@PathVariable String id) {
		return hystrixService.findOrderByUser(id);
	}
}

編碼完成 , 測試步驟和上面的步驟相同 , 啓動工程後關閉一個order服務,刷新多次發現

在這裏插入圖片描述
在這裏插入圖片描述

OK,大家看到,此時如果服務調用失敗,就會調用失敗的那個回調方法。

事實上,不僅僅是服務提供者被關閉時我們需要斷路器,如果請求超時也會觸發熔斷請求,調用回調方法返回數據。

好了斷路器就介紹到這裏 , 歡迎留言討論

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