javascript
SpringBoot版本:1.5.12.RELEASE 文件大小限制异常拦截网关zuul报错
SpringBoot版本:1.5.12.RELEASE
SpringCloud版本:1.4.3.RELEASE
文件上傳異常處理代碼:
@Order(LOWEST_PRECEDENCE)//指定該實體bean被加載的順序,注解中的值越小越優先被加載注入。 @RestControllerAdvice @Slf4j public class ApiExceptionHandler {@Value("${spring.http.multipart.max-file-size}")private String maxFileSize;@Value("${spring.http.multipart.max-request-size}")private String maxRequestSize;@ExceptionHandler(value = MultipartException.class)public Map<String, Object> fileUploadExceptionHandler(MultipartException e) {String msg = "";int code;if (e.getCause().getCause() instanceof FileUploadBase.FileSizeLimitExceededException) {code = Code.FILE_OPERATE_FLIE_MAX.getCode();msg = "上傳文件過大[單個文件不能超過" + maxFileSize + "]";} else if (e.getCause().getCause() instanceof FileUploadBase.SizeLimitExceededException) {code = Code.FILE_OPERATE_FLIE_MAX.getCode();msg = "上傳文件過大[總上傳大小不能超過" + maxRequestSize + "]";} else {code = Code.FILE_OPERATE_UPLOADING.getCode();msg = "文件上傳失敗[服務器異常]";}log.warn("上傳文件異常:{}", e.getMessage());Map<String, Object> result = new HashMap<>();result.put("code",code);result.put("msg",msg);return result;} }文件上傳cos服務端口號:8003
gateway網關端口號:3001
請求方式一:走文件上傳服務端口直接請求,地址:http://localhost:8003/uploadFile??
調用正常,cos控制臺打印信息如下,:
請求方式二:走網關服務,通過zuul代理cos服務請求文件上傳,請求地址:http://localhost:3001/cos/uploadFile
postman接口返回信息正常如下:
{"msg": "上傳文件過大[總上傳大小不能超過2000Mb]","code": -6005 }調用正常,自定義的異常處理器信息正常返回,cos服務控制臺無打印,網關服務控制臺正常打印如下:
缺點:
? ? 由于“請求方式二”的請求方式在springboot 1.5.x 版本中,文件上傳會中文亂碼,官方給出的解決方案是使用 添加/zuul/ 前綴代理,而SpringBoot 2.0.x以上版本則沒有此問題。(源碼解釋詳情請看文章最下面的轉載鏈接),因此為了舊版本上傳文件解決中文亂碼問題,必須得用第三種請求方式,如下:
請求方式三:添加/zuul/前綴解決上傳文件中文亂碼的請求方式,地址:http://localhost:3001/zuul/cos/uploadFile
然而,網關控制臺報錯信息如下:
2019-11-15 15:39:17.493 INFO 95844 --- [nio-3001-exec-9] com.ulegal.gateway.fiter.PreZuulFilter : request host : 0:0:0:0:0:0:0:1,request url : http://localhost:3001/zuul/cos/uploadFile 2019-11-15 15:39:31.663 INFO 95844 --- [nio-3001-exec-9] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@641b7bea: startup date [Fri Nov 15 15:39:31 CST 2019]; parent: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@565a24ed 2019-11-15 15:39:31.960 INFO 95844 --- [nio-3001-exec-9] f.a.AutowiredAnnotationBeanPostProcessor : JSR-330 'javax.inject.Inject' annotation found and supported for autowiring 2019-11-15 15:39:32.492 INFO 95844 --- [nio-3001-exec-9] c.netflix.config.ChainedDynamicProperty : Flipping property: ulegal-cos.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 2019-11-15 15:39:32.566 INFO 95844 --- [nio-3001-exec-9] c.n.u.concurrent.ShutdownEnabledTimer : Shutdown hook installed for: NFLoadBalancer-PingTimer-ulegal-cos 2019-11-15 15:39:32.638 INFO 95844 --- [nio-3001-exec-9] c.netflix.loadbalancer.BaseLoadBalancer : Client: ulegal-cos instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=ulegal-cos,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null 2019-11-15 15:39:32.657 INFO 95844 --- [nio-3001-exec-9] c.n.l.DynamicServerListLoadBalancer : Using serverListUpdater PollingServerListUpdater 2019-11-15 15:39:32.763 INFO 95844 --- [nio-3001-exec-9] c.netflix.config.ChainedDynamicProperty : Flipping property: ulegal-cos.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 2019-11-15 15:39:32.768 INFO 95844 --- [nio-3001-exec-9] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client ulegal-cos initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=ulegal-cos,current list of Servers=[192.168.2.189:8003],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone; Instance count:1; Active connections count: 0; Circuit breaker tripped count: 0; Active connections per server: 0.0;] },Server stats: [[Server:192.168.2.189:8003; Zone:defaultZone; Total Requests:0; Successive connection failure:0; Total blackout seconds:0; Last connection made:Thu Jan 01 08:00:00 CST 1970; First connection made: Thu Jan 01 08:00:00 CST 1970; Active Connections:0; total failure count in last (1000) msecs:0; average resp time:0.0; 90 percentile resp time:0.0; 95 percentile resp time:0.0; min resp time:0.0; max resp time:0.0; stddev resp time:0.0] ]}ServerList:org.springframework.cloud.netflix.ribbon.eureka.DomainExtractingServerList@e478054 2019-11-15 15:39:33.666 INFO 95844 --- [erListUpdater-0] c.netflix.config.ChainedDynamicProperty : Flipping property: ulegal-cos.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 2019-11-15 15:40:41.432 INFO 95844 --- [nio-3001-exec-9] o.apache.http.impl.execchain.RetryExec : I/O exception (java.net.SocketException) caught when processing request to {}->http://192.168.2.189:8003: Connection reset by peer: socket write error 2019-11-15 15:40:41.488 WARN 95844 --- [nio-3001-exec-9] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding errorat org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:188)at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:163)at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111)at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117)at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193)at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157)at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118)at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96)at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116)at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748) Caused by: com.netflix.client.ClientException: nullat com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:118)at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:187)at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:52)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.subscribe(Observable.java:10247)at rx.Observable.subscribe(Observable.java:10214)at rx.internal.operators.BlockingOperatorToFuture.toFuture(BlockingOperatorToFuture.java:51)at rx.observables.BlockingObservable.toFuture(BlockingObservable.java:411)at com.netflix.hystrix.HystrixCommand.queue(HystrixCommand.java:378)at com.netflix.hystrix.HystrixCommand.execute(HystrixCommand.java:344)at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:158)... 61 common frames omitted Caused by: java.lang.RuntimeException: org.apache.http.client.ClientProtocolExceptionat rx.exceptions.Exceptions.propagate(Exceptions.java:58)at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:464)at rx.observables.BlockingObservable.single(BlockingObservable.java:341)at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112)... 123 common frames omitted Caused by: org.apache.http.client.ClientProtocolException: nullat org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:187)at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)at org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient.execute(RibbonLoadBalancingHttpClient.java:82)at org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient.execute(RibbonLoadBalancingHttpClient.java:42)at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287)at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231)at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286)at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.subscribe(Observable.java:10247)at rx.Observable.subscribe(Observable.java:10214)at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:444)... 125 common frames omitted Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entityat org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:108)at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)... 149 common frames omitted Caused by: java.net.SocketException: Connection reset by peer: socket write errorat java.net.SocketOutputStream.socketWrite0(Native Method)at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)at java.net.SocketOutputStream.write(SocketOutputStream.java:155)at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:124)at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:136)at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:167)at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:113)at org.apache.http.entity.BasicHttpEntity.writeTo(BasicHttpEntity.java:117)at org.apache.http.impl.execchain.RequestEntityProxy.writeTo(RequestEntityProxy.java:121)at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:156)at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:160)at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:238)at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)... 151 common frames omitted2019-11-15 15:40:41.590 ERROR 95844 --- [nio-3001-exec-9] c.ulegal.gateway.fiter.ErrorZuulFilter : this is a ErrorFilter :com.netflix.zuul.exception.ZuulException: Forwarding errorcom.netflix.zuul.exception.ZuulException: Filter threw Exceptionat com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:227)at com.netflix.zuul.FilterProcessor.runFilters(FilterProcessor.java:157)at com.netflix.zuul.FilterProcessor.route(FilterProcessor.java:118)at com.netflix.zuul.ZuulRunner.route(ZuulRunner.java:96)at com.netflix.zuul.http.ZuulServlet.route(ZuulServlet.java:116)at com.netflix.zuul.http.ZuulServlet.service(ZuulServlet.java:81)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.boot.web.filter.ApplicationContextHeaderFilter.doFilterInternal(ApplicationContextHeaderFilter.java:55)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CorsFilter.doFilterInternal(CorsFilter.java:96)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.boot.actuate.trace.WebRequestTraceFilter.doFilterInternal(WebRequestTraceFilter.java:111)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:81)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.springframework.boot.actuate.autoconfigure.MetricsFilter.doFilterInternal(MetricsFilter.java:106)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:496)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:803)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748) Caused by: org.springframework.cloud.netflix.zuul.util.ZuulRuntimeException: com.netflix.zuul.exception.ZuulException: Forwarding errorat org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:116)at com.netflix.zuul.ZuulFilter.runFilter(ZuulFilter.java:117)at com.netflix.zuul.FilterProcessor.processZuulFilter(FilterProcessor.java:193)... 58 common frames omitted Caused by: com.netflix.zuul.exception.ZuulException: Forwarding errorat org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:188)at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:163)at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:111)... 60 common frames omitted Caused by: com.netflix.client.ClientException: nullat com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:118)at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:187)at org.springframework.cloud.netflix.zuul.filters.route.support.AbstractRibbonCommand.run(AbstractRibbonCommand.java:52)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:41)at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.subscribe(Observable.java:10247)at rx.Observable.subscribe(Observable.java:10214)at rx.internal.operators.BlockingOperatorToFuture.toFuture(BlockingOperatorToFuture.java:51)at rx.observables.BlockingObservable.toFuture(BlockingObservable.java:411)at com.netflix.hystrix.HystrixCommand.queue(HystrixCommand.java:378)at com.netflix.hystrix.HystrixCommand.execute(HystrixCommand.java:344)at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:158)... 61 common frames omitted Caused by: java.lang.RuntimeException: org.apache.http.client.ClientProtocolExceptionat rx.exceptions.Exceptions.propagate(Exceptions.java:58)at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:464)at rx.observables.BlockingObservable.single(BlockingObservable.java:341)at com.netflix.client.AbstractLoadBalancerAwareClient.executeWithLoadBalancer(AbstractLoadBalancerAwareClient.java:112)... 123 common frames omitted Caused by: org.apache.http.client.ClientProtocolException: nullat org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:187)at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108)at org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient.execute(RibbonLoadBalancingHttpClient.java:82)at org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient.execute(RibbonLoadBalancingHttpClient.java:42)at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287)at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231)at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286)at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185)at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180)at rx.Observable.unsafeSubscribe(Observable.java:10151)at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94)at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)at rx.Observable.subscribe(Observable.java:10247)at rx.Observable.subscribe(Observable.java:10214)at rx.observables.BlockingObservable.blockForSingle(BlockingObservable.java:444)... 125 common frames omitted Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entityat org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:108)at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111)at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)... 149 common frames omitted Caused by: java.net.SocketException: Connection reset by peer: socket write errorat java.net.SocketOutputStream.socketWrite0(Native Method)at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111)at java.net.SocketOutputStream.write(SocketOutputStream.java:155)at org.apache.http.impl.io.SessionOutputBufferImpl.streamWrite(SessionOutputBufferImpl.java:124)at org.apache.http.impl.io.SessionOutputBufferImpl.flushBuffer(SessionOutputBufferImpl.java:136)at org.apache.http.impl.io.SessionOutputBufferImpl.write(SessionOutputBufferImpl.java:167)at org.apache.http.impl.io.ContentLengthOutputStream.write(ContentLengthOutputStream.java:113)at org.apache.http.entity.BasicHttpEntity.writeTo(BasicHttpEntity.java:117)at org.apache.http.impl.execchain.RequestEntityProxy.writeTo(RequestEntityProxy.java:121)at org.apache.http.impl.DefaultBHttpClientConnection.sendRequestEntity(DefaultBHttpClientConnection.java:156)at org.apache.http.impl.conn.CPoolProxy.sendRequestEntity(CPoolProxy.java:160)at org.apache.http.protocol.HttpRequestExecutor.doSendRequest(HttpRequestExecutor.java:238)at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:123)at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185)at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)... 151 common frames omitted2019-11-15 15:41:22.586 INFO 95844 --- [trap-executor-0] c.n.d.s.r.aws.ConfigClusterResolver : Resolving eureka endpoints via configuration關鍵錯誤信息是:
Caused by: java.net.SocketException: Connection reset by peer: socket write error
意思是:
-
連接被對等重置:套接字寫錯誤
通過大量的百度搜索,終于找到比較靠譜的解釋(“詳情請看‘參考資料3’”),結合自己的情況分析得出原因:
? 上傳大文件時,gateway服務轉發請求時攜帶了文件信息到cos服務,此時間根據文件大小不同,時間有長短(我測試用的是2G文件用了,60秒,再測試用70MB文件上傳,用了45秒。),cos服務的文件異常攔截器截獲到文件大小超過限制的50MB,則直接return,斷開了socket連接,cos服務屬于“接收方”,單方面的“關閉輸入通道”,而gateway網關服務的是“發送方”,“輸出通道”還處于持續發送大文件信息的過程,此時由于“輸入通道”已關閉,不再接受數據,cos服務會回復一條“連接被對方重置”的報文給gateway服務,也就是“Connection reset”錯誤。當數據發送方出現這種情況時,大多數操作系統都會作為很嚴重的錯誤來處理,會刪除掉對端還未讀取的所有緩存數據。
Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity
意思是:不能使用不可重復請求實體重試請求。
猜測大文件上傳在通過gateway傳到cos服務的時候,走/zuul/是通過流傳播的,流屬于不可重復設置的實體。
?
解決辦法:
? ? 問題原因大概發現了,但是要如何解決這種問題呢?既要保證文件上傳沒有中文亂碼,又要保證大文件上傳的異常攔截生效。
研究了一天的源碼一無所獲之后,決定將升級項目版本。升版本的途中又浪費一天,填版本沖突的各種坑,升級版本后使用“請求方式三”依然存在問題,最后使用上文的“請求方式二”解決了,因為高版本不存在上傳文件中文亂碼問題。
最后升級的版本號:
SpringBoot版本:?2.1.10.RELEASE
SpringCloud版本:Greenwich.SR3
org.springframework.cloud版本:2.1.3.RELEASE
附錄:
SpringBoot版本與SpringCloud版本對照表:
?
參考資料:
1、關于'spring-cloud-zuul文件上傳中文名亂碼解決過程'地址,戳這里:https://blog.csdn.net/schzrj/article/details/81147656
2、關于HTTPEntity對象不可重復的官方文檔地址,戳這里:http://hc.apache.org/httpcomponents-client-ga/tutorial/html/fundamentals.html#d5e113,請看‘1.1.4.?HTTP entity’
3、關于connection reset錯誤的產生,戳這里:https://www.cnblogs.com/liqipeng/p/8639818.html
4、SpringCloud版本:Greenwich.SR3 官方文檔,戳這里:https://cloud.spring.io/spring-cloud-static/Greenwich.SR3/single/spring-cloud.html
5、SpringBoot版本:?2.1.10.RELEASE 官方文檔,戳這里:https://docs.spring.io/spring-boot/docs/2.1.10.RELEASE/reference/html/
新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!總結
以上是生活随笔為你收集整理的SpringBoot版本:1.5.12.RELEASE 文件大小限制异常拦截网关zuul报错的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZZULIOJ 1068:二进制数
- 下一篇: C语言——二分法查找一个数_数组