博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
0604-Zuul构建API Gateway-Zuul的回退
阅读量:6191 次
发布时间:2019-06-21

本文共 4261 字,大约阅读时间需要 14 分钟。

一、概述

  参看地址:

  Zuul本事是基于Hystrix和Ribbon等,默认会支持Hystrix的Command等

  在Zuul给定的路由回路跳闸,可以通过创建一个类型为ZuulFallbackProvider的bean来提供回退响应。在此bean中,您需要指定回退的路由ID,并提供ClientHttpResponse作为回退。这是一个非常简单的ZuulFallbackProvider实现。

 二、提供Hystrix路由回退

  当Zuul中给定路由的电路被触发时,您可以通过创建一个类型为ZuulFallbackProvider的bean来提供回退响应。在此bean中,您需要指定回退的路由ID,并提供ClientHttpResponse作为回退。这是一个非常简单的ZuulFallbackProvider实现。

class MyFallbackProvider implements ZuulFallbackProvider {    @Override    public String getRoute() {        return "customers";    }    @Override    public ClientHttpResponse fallbackResponse() {        return new ClientHttpResponse() {            @Override            public HttpStatus getStatusCode() throws IOException {                return HttpStatus.OK;            }            @Override            public int getRawStatusCode() throws IOException {                return 200;            }            @Override            public String getStatusText() throws IOException {                return "OK";            }            @Override            public void close() {            }            @Override            public InputStream getBody() throws IOException {                return new ByteArrayInputStream("fallback".getBytes());            }            @Override            public HttpHeaders getHeaders() {                HttpHeaders headers = new HttpHeaders();                headers.setContentType(MediaType.APPLICATION_JSON);                return headers;            }        };    }}

路由配置

zuul:  routes:    customers: /customers/**

如果您希望为所有路由提供默认回退,则可以创建类型为ZuulFallbackProvider的bean,并让getRoute方法返回*或null

class MyFallbackProvider implements ZuulFallbackProvider {    @Override    public String getRoute() {        return "*";    }    @Override    public ClientHttpResponse fallbackResponse() {        return new ClientHttpResponse() {            @Override            public HttpStatus getStatusCode() throws IOException {                return HttpStatus.OK;            }            @Override            public int getRawStatusCode() throws IOException {                return 200;            }            @Override            public String getStatusText() throws IOException {                return "OK";            }            @Override            public void close() {            }            @Override            public InputStream getBody() throws IOException {                return new ByteArrayInputStream("fallback".getBytes());            }            @Override            public HttpHeaders getHeaders() {                HttpHeaders headers = new HttpHeaders();                headers.setContentType(MediaType.APPLICATION_JSON);                return headers;            }        };    }}

如果您想选择基于故障原因的响应,请使用FallbackProvider,它将替换未来版本中的ZuulFallbackProvder。

class MyFallbackProvider implements FallbackProvider {    @Override    public String getRoute() {        return "*";    }    @Override    public ClientHttpResponse fallbackResponse(final Throwable cause) {        if (cause instanceof HystrixTimeoutException) {            return response(HttpStatus.GATEWAY_TIMEOUT);        } else {            return fallbackResponse();        }    }    @Override    public ClientHttpResponse fallbackResponse() {        return response(HttpStatus.INTERNAL_SERVER_ERROR);    }    private ClientHttpResponse response(final HttpStatus status) {        return new ClientHttpResponse() {            @Override            public HttpStatus getStatusCode() throws IOException {                return status;            }            @Override            public int getRawStatusCode() throws IOException {                return status.value();            }            @Override            public String getStatusText() throws IOException {                return status.getReasonPhrase();            }            @Override            public void close() {            }            @Override            public InputStream getBody() throws IOException {                return new ByteArrayInputStream("fallback".getBytes());            }            @Override            public HttpHeaders getHeaders() {                HttpHeaders headers = new HttpHeaders();                headers.setContentType(MediaType.APPLICATION_JSON);                return headers;            }        };    }}

 

 

 

 

 

 

 

 

 

都是

转载地址:http://fyrda.baihongyu.com/

你可能感兴趣的文章
Android Gradle(一)为什么现在要用Gradle?
查看>>
Python 简单入门指北(试读版)
查看>>
技术变化那么快,程序员如何做到不被淘汰?
查看>>
虚拟DOM总结
查看>>
阿里资深技术专家总结:要怎样努力才可以成为公司主力架构师
查看>>
k-means 聚类算法
查看>>
我们来说一说TCP神奇的40ms
查看>>
基于AOP的MVP框架(一)GoMVP的使用
查看>>
拜托,面试别再问我回文链表了!!!(leetcode 234)
查看>>
iOS冰与火之歌 – UAF and Kernel Pwn
查看>>
通过nginx配置文件抵御攻击
查看>>
攻击JavaWeb应用[7]-Server篇[1]
查看>>
使用新版Android Studio检测内存泄露和性能
查看>>
计算机系统002 - 数值运算
查看>>
antd源码解读(9)- Form
查看>>
动画-复制层(CAReplicatorLayer)
查看>>
[译] Architecture Components 之 ViewModel
查看>>
阿里云IoT将举办第三届极客创新挑战赛,吸引全球极客参赛
查看>>
在 MaxCompute UDF 中运行 Scipy
查看>>
java9系列(五)Stack-Walking API
查看>>