當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Spring Cloud Edgware新特性之八:Zuul回退的改进
生活随笔
收集整理的這篇文章主要介紹了
Spring Cloud Edgware新特性之八:Zuul回退的改进
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
Spring Cloud Edgware對Hystrix回退的邏輯進行了一些改進。本文將信息探討新舊版本的回退操作,并分析的原因及改進后的優勢。
Dalston及更低版本
對于Dalston及更低版本,要想為Zuul提供回退,只需編寫代碼如下:
@Component public class MyFallbackProvider implements ZuulFallbackProvider {@Overridepublic String getRoute() {// 表明是為哪個微服務提供回退,*表示為所有微服務提供回退return "*";}@Overridepublic ClientHttpResponse fallbackResponse() {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {// fallback時的狀態碼return HttpStatus.OK;}@Overridepublic int getRawStatusCode() throws IOException {// 數字類型的狀態碼,本例返回的其實就是200,詳見HttpStatusreturn this.getStatusCode().value();}@Overridepublic String getStatusText() throws IOException {// 狀態文本,本例返回的其實就是OK,詳見HttpStatusreturn this.getStatusCode().getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {// 響應體return new ByteArrayInputStream("用戶微服務不可用,請稍后再試。".getBytes());}@Overridepublic HttpHeaders getHeaders() {// headers設定HttpHeaders headers = new HttpHeaders();MediaType mt = new MediaType("application", "json", Charset.forName("UTF-8"));headers.setContentType(mt);return headers;}};} }Edgware及更高版本
@Component public class MyFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {// 表明是為哪個微服務提供回退,*表示為所有微服務提供回退return "*";}@Overridepublic ClientHttpResponse fallbackResponse(Throwable cause) {if (cause instanceof HystrixTimeoutException) {return response(HttpStatus.GATEWAY_TIMEOUT);} else {return this.fallbackResponse();}}@Overridepublic ClientHttpResponse fallbackResponse() {return this.response(HttpStatus.INTERNAL_SERVER_ERROR);}private ClientHttpResponse response(final HttpStatus status) {return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {return status;}@Overridepublic int getRawStatusCode() throws IOException {return status.value();}@Overridepublic String getStatusText() throws IOException {return status.getReasonPhrase();}@Overridepublic void close() {}@Overridepublic InputStream getBody() throws IOException {return new ByteArrayInputStream("服務不可用,請稍后再試。".getBytes());}@Overridepublic HttpHeaders getHeaders() {// headers設定HttpHeaders headers = new HttpHeaders();MediaType mt = new MediaType("application", "json", Charset.forName("UTF-8"));headers.setContentType(mt);return headers;}};} }分析
由代碼可知:
- Dalston及更低版本通過實現ZuulFallbackProvider 接口,從而實現回退;
- Edgware及更高版本通過實現FallbackProvider 接口,從而實現回退。
- 在Edgware中:
- FallbackProvider是ZuulFallbackProvider的子接口。
- ZuulFallbackProvider已經被標注Deprecated ,很可能在未來的版本中被刪除。
- FallbackProvider接口比ZuulFallbackProvider多了一個ClientHttpResponse fallbackResponse(Throwable cause); 方法,使用該方法,可獲得造成回退的原因。
- 筆者將在下一篇文章詳細總結在Spring Cloud中如何獲得造成回退原因的各種姿勢。
轉載于:https://my.oschina.net/eacdy/blog/1609309
總結
以上是生活随笔為你收集整理的Spring Cloud Edgware新特性之八:Zuul回退的改进的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java中如何判断aabb_java判断
- 下一篇: php模拟环境搭建,PHP环境搭建最新方