zuul java.io.EOFException: неожиданное чтение EOF в сокете - PullRequest
0 голосов
/ 07 мая 2018

У меня есть спокойный API, который может загружать файл, я использую метод API напрямую, он работает хорошо, но когда я использую Spring Cloud Zuul в качестве прокси, я получаю информацию об ошибке в моей службе API Restful:

[23: 01: 11: 087] [ОШИБКА] - org.apache.juli.logging.DirectJDKLog.log (DirectJDKLog.java:182) - Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [ ] сгенерировал исключение [Ошибка обработки запроса; вложенным исключением является org.springframework.web.multipart.MultipartException: не удалось проанализировать многочастный запрос сервлета; вложенное исключение: 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] at 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] at java.io.FilterInputStream.read (FilterInputStream.java:133) ~ [?: 1.8.0_131] в org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read (LimitedInputStream.java:132) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] в org.apache.tomcat.util.http.fileupload.MultipartStream $ ItemInputStream.makeAvailable (MultipartStream.java:977) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] в org.apache.tomcat.util.http.fileupload.MultipartStream $ ItemInputStream.read (MultipartStream.java:881) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] at 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] в org.apache.tomcat.util.http.fileupload.MultipartStream.readBodyData (MultipartStream.java:572) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] в org.apache.tomcat.util.http.fileupload.MultipartStream.discardBodyData (MultipartStream.java:596) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] в org.apache.tomcat.util.http.fileupload.MultipartStream.skipPreamble (MultipartStream.java:614) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] в org.apache.tomcat.util.http.fileupload.FileUploadBase $ FileItemIteratorImpl.findNextItem (FileUploadBase.java:865) ~ [tomcat-embed-core-9.0.7.jar: 9.0.7] в 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] в 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] at 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] at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal (CharacterEncodingFilter.java:200) ~ [spring-web-5.0.4.RELEASE.jar: 5.0.4.RELEASE] at 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] в 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] в 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] в 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] в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) [?: 1.8.0_131] в org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61) [tomcat-embed-core-9.0.7.jar: 9.0.7] at java.lang.Thread.run (Thread.java:748) [?: 1.8.0_131]

это мой конфиг zuul proxy:

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

Кто-нибудь может мне помочь, я пытался искать в Google снова и снова, но я ничего не нашел по этому поводу, я уже добавил некоторые конфигурации о multipart, но это все еще не работает, я понятия не имею об этой проблеме ,

1 Ответ

0 голосов
/ 09 мая 2018

Путь прокси для загрузки файлов работает, пока размеры файлов невелики.

Для больших файлов существует альтернативный путь, который обходит Spring DispatcherServlet (чтобы избежать многоэтапной обработки) в "/ zuul / *". Другими словами, если у вас есть zuul.routes.customers = / Customers / **, вы можете отправить большие файлы в / zuul / Customers / *. Путь сервлета выводится через zuul.servletPath.

Если прокси-маршрут проходит через балансировщик нагрузки ленты (если вы используете serviceID вместо url в основном), для очень больших файлов также требуются повышенные параметры тайм-аута, как показано в следующем примере

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