Spring boot 正确设置Spring 5 WebClient的请求超时
我希望能够为Spring5WebClient(SpringBootVersion2.0.0.RELEASE)发出的请求设置超时值。我的第一次尝试是按照此答案中的建议配置WebClient:。如果服务器没有及时响应,则此操作将正确超时。但这还有其他含义:在WebClient成功发出响应后(在Spring boot 正确设置Spring 5 WebClient的请求超时,spring-boot,spring-webflux,Spring Boot,Spring Webflux,我希望能够为Spring5WebClient(SpringBootVersion2.0.0.RELEASE)发出的请求设置超时值。我的第一次尝试是按照此答案中的建议配置WebClient:。如果服务器没有及时响应,则此操作将正确超时。但这还有其他含义:在WebClient成功发出响应后(在.retrive()或.exchange()之后),计时器将继续运行,因此如果达到超时值,则会引发超时异常 这似乎是ReadTimeoutHandler在经过配置的时间段后超时的预期行为,并且netty通道没有
.retrive()
或.exchange()
之后),计时器将继续运行,因此如果达到超时值,则会引发超时异常
这似乎是ReadTimeoutHandler在经过配置的时间段后超时的预期行为,并且netty通道没有读取任何数据(忽略以前读取的数据)。
换句话说:您使用WebClient调用外部http服务(已配置ReadTimeoutHandler),然后工作处理程序执行某些可能比超时值花费更多时间的工作,因此。。。。引发io.netty.handler.timeout.ReadTimeoutException
所以。。。就我的问题而言:如何正确地为每个客户端请求设置一个超时时间对使用WebClient进行的每个http调用?我有一种可能的方法:在每个webClient调用的顶部链接timeout
Mono方法。我想知道在服务中断的最终情况下,这是否会导致某种资源泄漏。还有其他选择吗
提前感谢 你问题的这一部分并不完全清楚 如果服务器没有及时响应,则此操作将正确超时。但这还有其他含义:WebClient成功发出响应(在.retrive()或.exchange()之后)后,计时器将继续运行,因此如果达到超时值,则会引发超时异常 在反应堆网络级别,您可以配置以下几项:
- 连接超时,即客户端与服务器建立连接所需的最长时间
- 读取超时,客户端在没有从服务器接收数据且响应不完整时应等待的最长时间
timeout
操作符附加到反应链中。如果出现超时或错误,所有处理池资源的SpringWebFlux操作都会清理这些资源以避免泄漏。如果您手动处理没有代码手动调用就无法进行GCD的资源,那么您当然要对此负责