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