为路线提供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;

            }

        };

    }

}

你可能感兴趣的:(为路线提供Hystrix回退)