SpringCloud zuul控制全局回退异常导致其它路由(服务)无法返回连接超时异常信息

我的环境就是使用了zuul来控制全局回退异常,如果其中任何一个服务导致连接超时或者其它异常,都将通过zuul进行回退异常。

网关核心类如下:该类的作用就是控制了所有注册到eureka上面的服务的-全局异常处理。

/**
*@Component 这个注解就是说将它注册到服务中去(也就是spring容器中)
*它和@Bean 大同小异  @Bean也是注册到spring容器中,只不过它是基于配置类使用
*再加上 @Configuration 注解就行了
**/
@Component
public class ServiceFallbackProvider 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("服务故障,请稍后重试!".getBytes());
            }
            //设置编码为utf-8
            @Override
            public HttpHeaders getHeaders() {
                HttpHeaders headers = new HttpHeaders();
                headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
                return headers;
            }
        };
    }

}

网关配置如下:截取解决此次其它服务超时连接异常的代码

 #设置调用者等待命令执行得超时限制,超过此时间,hystrixCommand被标记未TIMEOUT,并执行回退逻辑
    #默认值1000 毫秒=1秒
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
          #ribbon 超时时间配置 以毫秒为单位
ribbon:
  #正常情况下,当客户端向服务器端发送请求时,如果网络很差,就会无法响应内容,这里可以设置为1分钟,如果1分钟访问不到则抛出超时异常
  ReadTimeout: 60000
  #这个指建立连接所用的时间,适应于网络正常情况下,如果1分钟未建立连接,抛出异常
  ConnectTimeout: 60000
#这个表示在响应非正常情况时,表示开启重试机制,
spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true

这样问题就解决了。~~~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值