SpringCloud使用Zuul进行容错回退

简介: Zuul进行回退处理

很多时候,由于服务的重启、宕机或者网络的不佳,Zuul进行路由时会出现异常,然后,异常信息直接展示给用户是不友好的, 需要我们提示一些通俗易懂的信息告知用户为什么会出现失败,这时就可以用到回退处理,SpringCloud中使用Hystrix实现微服务的容错与回退,其实Zuul默认已经整合了Hystrix

本文讲解Zuul如何实现回退策略,Hystrix组件不了解的话大家可以前往我的这篇文章:SpringCloud组件之Hystrix

一、实现FallbackProvider接口

本文用的Zuul服务为前几篇文章所搭建的,这里不在搭建Zuul服务,对Zuul不了解的话可以查看之前的文章:SpringCloud组件之Zuul

/**
 * @author Gjing
 **/

@Component
public class GlobalFallback implements FallbackProvider {
    /**
     * 这里配置是为哪个服务提供回退,*号代表所有服务
     */
    @Override
    public String getRoute() {
        return "*";
    }

    /**
     * 回退返回
     */
    @Override
    public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
        return new ClientHttpResponse() {
            @Override
            @NonNull
            public HttpStatus getStatusCode() throws IOException {
                return HttpStatus.BAD_REQUEST;
            }

            @Override
            public int getRawStatusCode() throws IOException {
                return HttpStatus.BAD_REQUEST.value();
            }

            @Override
            @NonNull
            public String getStatusText() throws IOException {
                return HttpStatus.BAD_REQUEST.getReasonPhrase();
            }

            @Override
            public void close() {

            }

            @Override
            @NonNull
            public InputStream getBody() throws IOException {
                return new ByteArrayInputStream("服务器异常请稍后再试".getBytes(StandardCharsets.UTF_8));
            }

            @Override
            @NonNull
            public HttpHeaders getHeaders() {
                HttpHeaders httpHeaders = new HttpHeaders();
                httpHeaders.setContentType(MediaType.APPLICATION_JSON);
                return httpHeaders;
            }
        };
    }
}

相关方法介绍

方法名 说明
getRoute 为哪个服务提供回退,*号代表所有服务
fallbackResponse 回退响应
getStatusCode 回退时的状态码
getRawStatusCode 数字类型状态码
getStatusText 状态文本
close 这个不用管
getBody 响应体
getHeaders 返回的响应头

二、配置超时时间

# 负载均衡超时时间设置
ribbon:
  ReadTimeout: 读超时时间(单位毫秒)
  socketTimeOut: 连接超时时间(单位毫秒)

注意!!!:如果zuul配置了熔断fallback的话,熔断超时也要配置,不然如果你配置的ribbon超时时间大于熔断的超时(Hystirx超时默认1秒),那么会先走熔断,相当于你配的ribbon超时就不生效了,ribbon和hystrix是同时生效的,哪个值小哪个生效,另一个就看不到效果了

hystrix:
  command:
   # default为默认所有,可以配置指定服务名
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 超时时间(单位毫秒)

三、启动Eureka、Zuul和一个Web服务,并在web服务接口设置线程休眠,模拟超时,当请求实际达到设置的超时时间后会进行回退

1562037222_1_

本文到此就结束了,合理的配置超时时间和回退,有助于让程序体验性更好哦,具体还是要视实际业务场景而定哦,本Demo源代码地址为:SpringCloud-Demo

目录
相关文章
|
30天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(二)Rest微服务工程搭建
45 0
|
1月前
|
消息中间件 Cloud Native Java
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
【Spring云原生系列】SpringBoot+Spring Cloud Stream:消息驱动架构(MDA)解析,实现异步处理与解耦合
|
30天前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
130 0
|
30天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
80 0
|
1月前
|
消息中间件 JSON Java
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
Spring Boot、Spring Cloud与Spring Cloud Alibaba版本对应关系
394 0
|
30天前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(目录大纲)
61 1
|
30天前
|
Java Nacos Sentinel
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(九)Nacos+Sentinel+Seata
183 0
|
30天前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
772 0
|
30天前
|
SpringCloudAlibaba Java 测试技术
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(六)Hystrix(豪猪哥)的使用
36 1
|
30天前
|
SpringCloudAlibaba 负载均衡 Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(五)OpenFeign的使用
36 0

热门文章

最新文章