zuul容错与回退
?zuul默認是整合了hystrix和ribbon的, 提供降級回退,那如何來使用hystrix呢?
我們自行寫一個類,繼承FallbackProvider 類 然后重寫里面的方法
@Override public String getRoute() {return null; }@Override public ClientHttpResponse fallbackResponse(String route, Throwable cause) {return null; }這里 會發現有這2個方法需要重寫, 那么如何來寫呢? 我們可以查閱官方文檔:
這是官方提供的demo
代碼:
class MyFallbackProvider implements FallbackProvider {@Overridepublic String getRoute() {//制定為哪個微服務提供回退(這里寫微服務名 寫*代表所有微服務)return "*";}//此方法需要返回一個ClientHttpResponse對象 ClientHttpResponse是一個接口,具體的回退邏輯要實現此接口//route:出錯的微服務名 cause:出錯的異常對象@Overridepublic ClientHttpResponse fallbackResponse(String route, final Throwable cause) {//這里可以判斷根據不同的異常來做不同的處理, 也可以不判斷//完了之后調用response方法并根據異常類型傳入HttpStatusif (cause instanceof HystrixTimeoutException) {return response(HttpStatus.GATEWAY_TIMEOUT);} else {return response(HttpStatus.INTERNAL_SERVER_ERROR);}}private ClientHttpResponse response(final HttpStatus status) {//這里返回一個ClientHttpResponse對象 并實現其中的方法,關于回退邏輯的詳細,便在下面的方法中return new ClientHttpResponse() {@Overridepublic HttpStatus getStatusCode() throws IOException {//返回一個HttpStatus對象 這個對象是個枚舉對象, 里面包含了一個status code 和reasonPhrase信息return status;}@Overridepublic int getRawStatusCode() throws IOException {//返回status的code 比如 404,500等return status.value();}@Overridepublic String getStatusText() throws IOException {//返回一個HttpStatus對象的reasonPhrase信息return status.getReasonPhrase();}@Overridepublic void close() {//close的時候調用的方法, 講白了就是當降級信息全部響應完了之后調用的方法}@Overridepublic InputStream getBody() throws IOException {//吧降級信息響應回前端return new ByteArrayInputStream("降級信息".getBytes());}@Overridepublic HttpHeaders getHeaders() {//需要對響應報頭設置的話可以在此設置HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_JSON);return headers;}};} }?
總結
- 上一篇: zuul过滤器
- 下一篇: HystrixDashbord