Zuul和Hystrix无缝整合/服务降级处理

Zuul和Hystrix无缝整合

在 Zuul 的 启动器中,包含了 hystrix 的 jar 包。所以我们不需要在项目中添加 Hystrix 的坐标

直接访问Zuul的地址:服务端口/hystrix.stream即可

当然,如果需要视图化查看的话,只需要通过搭建dashboard-view 服务通过可视化界面查看监控数据。

Zuul网关中实现对服务降级处理

Zuul网关中实现服务降级,只需要在Zuul网关的服务中,编写实现ZuulFallbackProvider接口的java类即可

getRoute方法是执行要为哪个服务配置降级处理
fallbackResponse方法是进行返回托底信息的,
具体方法说明看如下代码和注释:

@Component
public class ProductFallback implements ZuulFallbackProvider {
    /**
     * 指定需要托底处理的服务名
     */
    @Override
    public String getRoute() {
        return "e-book-product-provider";
    }

    /**
     * 服务无法使用时,返回的托底信息
     */
    @Override
    public ClientHttpResponse fallbackResponse() {
        return new ClientHttpResponse() {
            /**
             * ClientHttpResponse 的 fallback 的状态码 返回HttpStatus
             */
            @Override
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.OK;
            }
            /**
             * ClientHttpResponse 的 fallback 的状态码 返回 int
             */
            @Override
            public int getRawStatusCode() throws IOException {
                return getStatusCode().value();
            }

            /**
             * ClientHttpResponse 的 fallback 的状态码 返回 String
             */
            @Override
            public String getStatusText() throws IOException {
                return getStatusCode().getReasonPhrase();
            }


            /**
             * 设置响应体
             */
            @Override
            public InputStream getBody() throws IOException {
                String msg = "当前服务不可用,请稍后再试";
                return new ByteArrayInputStream(msg.getBytes());
            }
            /**
             * 设置响应的头信息
             */
            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders= new HttpHeaders();
                MediaType mediaType = new MediaType("application","json", Charset.forName("utf-8"));
                httpHeaders.setContentType(mediaType);
                return httpHeaders;
            }

            @Override
            public void close() {
            }
        };
    }
}

注意,当前进行服务降级的服务,在注册中心必须存在,否则,会直接出404,No message available错误,不会进行降级

开启e-book-product-provider服务,正常访问

在e-book-product-provider服务中,手动将线程睡眠10秒,模拟请求超时,此时返回托底信息

你可能感兴趣的:(Zuul和Hystrix无缝整合/服务降级处理)