springcloud微服务 Tomcat 您的主机中的软件中止了一个已建立的连接

前言

Sptingcloud 微服务,springboot2.0.3, springcloud Finchley.RELEASE, spring cloud gateway 网关

    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.3.RELEASE
         
    
    
    
        
            
                org.springframework.cloud
                spring-cloud-dependencies
                Finchley.RELEASE
                pom
                import
            
        
       
        
            org.springframework.cloud
            spring-cloud-starter-gateway
        

场景

微服务中 通过网关去请求下游的服务,出现下面的错误

org.apache.catalina.connector.ClientAbortException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:396) ~[catalina.jar:8.0.35]
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:426) ~[tomcat-util.jar:8.0.35]
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:339) ~[tomcat-util.jar:8.0.35]
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:421) ~[catalina.jar:8.0.35]
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:409) ~[catalina.jar:8.0.35]
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:97) ~[catalina.jar:8.0.35]
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator._flushBuffer(UTF8JsonGenerator.java:1819) ~[jackson-core-2.1.0.jar:2.1.0]
    at com.fasterxml.jackson.core.json.UTF8JsonGenerator.writeString(UTF8JsonGenerator.java:436) ~[jackson-core-2.1.0.jar:2.1.0]
    at com.fasterxml.jackson.databind.ser.std.StringSerializer.serialize(StringSerializer.java:38) ~[jackson-databind-2.1.0.jar:2.1.0]

解决方法

因为网关中整合了hystrix,hystrix默认熔断的时间是1s, 所以当网关路由请求到下游服务的时候,下游的服务处理时间大于1s,导致网关触发1s超时,关闭链接,因此会出现上面的错误

方法:在网关的yml文件的延长hystrix熔断时间,,具体时间根据真实业务来定,本博客中修改成30s

##设置hystrix超时时间(毫秒),设置调用者等待命令执行的超时限制,超过此时间,HystrixCommand被标记为TIMEOUT,并执行回退逻辑,默认1s
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000

你可能感兴趣的:(springcloud)