十、微服务网关之Zuul容错与回退


Spring Cloud中,Zuul默认已经整合了Hystrix

Zuul回退

编写Zuul回退类:

@Component
public class MyFallbackProvider implements FallbackProvider {
//    表明是为哪个微服务提供回退,*代表所有
    @Override
    public String getRoute() {
        return "*";
    }

    @Override
    public ClientHttpResponse fallbackResponse() {
        return this.response(HttpStatus.INTERNAL_SERVER_ERROR);
    }

    @Override
    public ClientHttpResponse fallbackResponse(Throwable cause) {
        if (cause instanceof HystrixTimeoutException) {
            return response(HttpStatus.GATEWAY_TIMEOUT);
        } else {
            return this.fallbackResponse();
        }
    }

    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("服务不可用,请稍后再试。".getBytes());
            }

            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders = new HttpHeaders();
                MediaType mediaType = new MediaType("application", "json", Charset.forName("UTF-8"));
                httpHeaders.setContentType(mediaType);
                return httpHeaders;
            }
        };
    }
}

当访问的微服务无法正常响应时,会返回如下内容:

服务不可用,请稍后再试。

该文章摘自《Spring Cloud 与 Docker 微服务架构实战(第二版)》

以上


文章作者: Qliang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Qliang !
评论
 上一篇
十一、微服务网关之Zuul的Hystrix隔离策略和线程池 十一、微服务网关之Zuul的Hystrix隔离策略和线程池
Spring Cloud中,Zuul默认已经整合了Hystrix,而Hystrix有隔离策略——THREAD及SEMAPHORE。 隔离策略 默认情况下,Zuul的隔离策略是SEMAPHORE 。 可设置zuul.ribbonIsolati
2019-01-27
下一篇 
九、微服务网关之Zuul过滤器 九、微服务网关之Zuul过滤器
过滤器类型与请求生命周期 PRE:这种过滤器在请求被路由之前调用。可利用这种过滤器实现身份验证、在集群中选择请求的微服务、记录调试信息等。 ROUTING:这种过滤器将请求路由到微服务。这种过滤器用于构建发送给微服务的请求,并使用Apach
2019-01-26
  目录