Zuul和Hystrix無縫整合
在 Zuul 的 啟動(dòng)器中,包含了 hystrix 的 jar 包。所以我們不需要在項(xiàng)目中添加 Hystrix 的坐標(biāo)
直接訪問Zuul的地址:服務(wù)端口/hystrix.stream即可當(dāng)然,如果需要視圖化查看的話,只需要通過搭建dashboard-view 服務(wù)通過可視化界面查看監(jiān)控?cái)?shù)據(jù)。
Zuul網(wǎng)關(guān)中實(shí)現(xiàn)對(duì)服務(wù)降級(jí)處理
Zuul網(wǎng)關(guān)中實(shí)現(xiàn)服務(wù)降級(jí)丘薛,只需要在Zuul網(wǎng)關(guān)的服務(wù)中,編寫實(shí)現(xiàn)ZuulFallbackProvider接口的java類即可
getRoute方法是執(zhí)行要為哪個(gè)服務(wù)配置降級(jí)處理
fallbackResponse方法是進(jìn)行返回托底信息的垄提,
具體方法說明看如下代碼和注釋:
@Component
public class ProductFallback implements ZuulFallbackProvider {
/**
* 指定需要托底處理的服務(wù)名
*/
@Override
public String getRoute() {
return "e-book-product-provider";
}
/**
* 服務(wù)無法使用時(shí)榔袋,返回的托底信息
*/
@Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
/**
* ClientHttpResponse 的 fallback 的狀態(tài)碼 返回HttpStatus
*/
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
/**
* ClientHttpResponse 的 fallback 的狀態(tài)碼 返回 int
*/
@Override
public int getRawStatusCode() throws IOException {
return getStatusCode().value();
}
/**
* ClientHttpResponse 的 fallback 的狀態(tài)碼 返回 String
*/
@Override
public String getStatusText() throws IOException {
return getStatusCode().getReasonPhrase();
}
/**
* 設(shè)置響應(yīng)體
*/
@Override
public InputStream getBody() throws IOException {
String msg = "當(dāng)前服務(wù)不可用,請(qǐng)稍后再試";
return new ByteArrayInputStream(msg.getBytes());
}
/**
* 設(shè)置響應(yīng)的頭信息
*/
@Override
public HttpHeaders getHeaders() {
HttpHeaders httpHeaders= new HttpHeaders();
MediaType mediaType = new MediaType("application","json", Charset.forName("utf-8"));
httpHeaders.setContentType(mediaType);
return httpHeaders;
}
@Override
public void close() {
}
};
}
}
注意铡俐,當(dāng)前進(jìn)行服務(wù)降級(jí)的服務(wù)凰兑,在注冊(cè)中心必須存在,否則审丘,會(huì)直接出404,No message available錯(cuò)誤吏够,不會(huì)進(jìn)行降級(jí)在e-book-product-provider服務(wù)中,手動(dòng)將線程睡眠10秒锅知,模擬請(qǐng)求超時(shí)播急,此時(shí)返回托底信息