zuul java.io.EOFException:套接字

时间:2018-05-07 15:22:50

标签: netflix-zuul

我有一个可以上传文件的restful api,我直接使用api方法,它运行良好,但是当我使用spring cloud zuul作为代理时,我收到了关于我的restful api服务的错误信息:

  

[23:01:11:087] [错误] - org.apache.juli.logging.DirectJDKLog.log(DirectJDKLog.java:182) - Servlet [dispatcherServlet]的Servlet.service()与上下文路径[抛出异常[请求处理失败;嵌套异常是org.springframework.web.multipart.MultipartException:无法解析多部分servlet请求;嵌套异常是java.io.IOException:org.apache.tomcat.util.http.fileupload.FileUploadException:在插槽上读取意外的EOF]       java.io.EOFException:在套接字上读取意外的EOF           在org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:716)~ [tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.http11.Http11InputBuffer.access $ 300(Http11InputBuffer.java:40)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.http11.Http11InputBuffer $ SocketInputBuffer.doRead(Http11InputBuffer.java:1043)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:102)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.http11.Http11InputBuffer.doRead(Http11InputBuffer.java:243)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.Request.doRead(Request.java:551)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:318)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.InputBuffer.checkByteBufferEof(InputBuffer.java:611)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:341)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:132)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在java.io.FilterInputStream.read(FilterInputStream.java:133)〜[?:1.8.0_131]           at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:132)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.MultipartStream $ ItemInputStream.makeAvailable(MultipartStream.java:977)~ [tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.MultipartStream $ ItemInputStream.read(MultipartStream.java:881)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在java.io.InputStream.read(InputStream.java:101)〜[?:1.8.0_131]           在org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:98)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:68)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.MultipartStream.readBodyData(MultipartStream.java:572)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.MultipartStream.discardBodyData(MultipartStream.java:596)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.MultipartStream.skipPreamble(MultipartStream.java:614)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.FileUploadBase $ FileItemIteratorImpl.findNextItem(FileUploadBase.java:865)~ [tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.FileUploadBase $ FileItemIteratorImpl。(FileUploadBase.java:845)~ [tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.tomcat.util.http.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:256)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:280)~ [tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.Request.parseParts(Request.java:2804)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.Request.parseParameters(Request.java:3148)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.Request.getParameter(Request.java:1109)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:381)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:75)〜[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]           在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]           在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)〜[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]           在org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)〜[spring-web-5.0.4.RELEASE.jar:5.0.4.RELEASE]           在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)〜[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:407)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)[tomcat-embed-core-9.0.7.jar:9.0.7]           at org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:754)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1376)[tomcat-embed-core-9.0.7.jar:9.0.7]           在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)[tomcat-embed-core-9.0.7.jar:9.0.7]           在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[?:1.8.0_131]           at java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)[?:1.8.0_131]           at org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)[tomcat-embed-core-9.0.7.jar:9.0.7]           在java.lang.Thread.run(Thread.java:748)[?:1.8.0_131]

这是我的zuul代理配置:

spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB
zuul.prefix=/appapi
zuul.host.maxTotalConnections=1000
zuul.host.maxPerRouteConnections=80
zuul.RibbonRoutingFilter.route.disable=false
zuul.FormBodyWrapperFilter.pre.disable=false
zuul.SendErrorFilter.error.disable=false
zuul.routes.userservice.stripPrefix=false
zuul.routes.userservice.path=/usersvrc/**
zuul.routes.userservice.serviceId=test-user-service

有没有人可以帮助我,我试图一遍又一遍地搜索谷歌,但我一无所知,我已经添加了一些关于多部分的配置,但它仍然不起作用,我不知道这个问题。

1 个答案:

答案 0 :(得分:0)

只要文件大小很小,

上传文件的代理路径就可以工作。

对于大型文件,有一个替代路径绕过Spring DispatcherServlet(以避免多部分处理)在" / zuul / *"中。换句话说,如果你有zuul.routes.customers = / customers / **,那么你可以将大文件POST到/ zuul / customers / *。 servlet路径通过zuul.servletPath外部化。

如果代理路由引导您完成功能区负载均衡器(如果您基本上使用的是serviceID而不是url),则非常大的文件也需要提升超时设置,如以下示例所示

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 60000
ribbon:
  ConnectTimeout: 3000
  ReadTimeout: 60000