codecentric / spring-boot-admin

Admin UI for administration of spring boot applications
Apache License 2.0
12.31k stars 3.07k forks source link

Seeing "java.net.SocketTimeoutException: Read timed out" when http POST data is sent to proxied server via zuul proxy #542

Closed chhonker closed 6 years ago

chhonker commented 7 years ago

Version used with gradle: compile("org.springframework.cloud:spring-cloud-starter-zuul:1.0.4.RELEASE")

I'm trying to post data to SensorThings Server (https://github.com/FraunhoferIOSB/SensorThingsServer) using my spring app which uses zuul proxy for sending request to servers.

All GET request are working fine with the configuration, but POST request are throwing error. Any possible reason for this. Also, if I hit the same POST request directly on the Sensor Server, it works.

2017-09-07 17:54:38.320 DEBUG 7041 --- [io-19091-exec-6] o.s.web.servlet.DispatcherServlet        : DispatcherServlet with name 'dispatcherServlet' processing POST request for [/sensor/v1.0/Things]
2017-09-07 17:54:38.324  WARN 7041 --- [io-19091-exec-6] c.n.zuul.http.HttpServletRequestWrapper  : Content-length different from byte array length! cl=473, array=0
2017-09-07 17:54:38.324  INFO 7041 --- [io-19091-exec-6] o.s.c.n.zuul.filters.ProxyRouteLocator   : Finding route for path: /sensor/v1.0/Things
17:54:58.350 [http-bio-19201-exec-6] ERROR   d.f.iosb.ilt.sta.Servlet_1_0 -
java.net.SocketTimeoutException: Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:535)
        at org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:504)
        at org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:566)
        at org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:137)
        at org.apache.coyote.http11.AbstractInputBuffer.doRead(AbstractInputBuffer.java:341)
        at org.apache.coyote.Request.doRead(Request.java:431)
        at org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:290)
        at org.apache.catalina.connector.InputBuffer.realReadChars(InputBuffer.java:353)
        at org.apache.tomcat.util.buf.CharChunk.substract(CharChunk.java:439)
        at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:416)
        at org.apache.catalina.connector.CoyoteReader.read(CoyoteReader.java:108)
        at org.apache.catalina.connector.CoyoteReader.readLine(CoyoteReader.java:163)
        at de.fraunhofer.iosb.ilt.sta.Servlet_1_0.readRequestData(Servlet_1_0.java:179)
        at de.fraunhofer.iosb.ilt.sta.Servlet_1_0.serviceRequestFromHttpRequest(Servlet_1_0.java:107)
        at de.fraunhofer.iosb.ilt.sta.Servlet_1_0.executeService(Servlet_1_0.java:91)
        at de.fraunhofer.iosb.ilt.sta.Servlet_1_0.processPostRequest(Servlet_1_0.java:72)
        at de.fraunhofer.iosb.ilt.sta.Servlet_1_0.doPost(Servlet_1_0.java:140)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
        at de.fraunhofer.iosb.ilt.sta.Servlet_1_0.service(Servlet_1_0.java:173)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.filters.CorsFilter.handleNonCORS(CorsFilter.java:436)
        at org.apache.catalina.filters.CorsFilter.doFilter(CorsFilter.java:177)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        at java.lang.Thread.run(Thread.java:748)
2017-09-07 17:54:58.351 DEBUG 7041 --- [io-19091-exec-6] o.s.web.servlet.DispatcherServlet        : Null ModelAndView returned to DispatcherServlet with name 'dispatcherServlet': assuming HandlerAdapter completed request handling
2017-09-07 17:54:58.351 DEBUG 7041 --- [io-19091-exec-6] o.s.web.servlet.DispatcherServlet        : Successfully completed request
joshiste commented 6 years ago

Best way to resolve this is not to include your monitoring server into your business application. Make two separate applications out of it and SBA can't corrupt your application.

chhonker commented 6 years ago

@joshiste, do you mean to host both webapps on different servers? Also did you also see this line-> 2017-09-07 17:54:38.324 WARN 7041 --- [io-19091-exec-6] c.n.zuul.http.HttpServletRequestWrapper : Content-length different from byte array length! cl=473, array=0

joshiste commented 6 years ago

do you mean to host both webapps on different servers?

I just meant that you should use two separate spring boot apps: one for your business and one for monitoring.

After re-reading your issue, I don't find any clue how this relates to spring boot admin...