当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux WebClient超时()和交换()

傅浩漫
2023-03-14

我的代码类似于以下示例:

Mono<ResponseEntity<String>> result = webClient
    .post()
    .body(Mono.just(command), MyCommand.class)
    .exchange()
    .timeout(calculateTimeout(command))
    .flatMap(clientResponse -> clientResponse.toEntity(String.class));

spring文档说:

使用Exchange()时,您必须始终使用ClientContent的任何正文或toEntity方法,以确保资源被释放,并避免HTTP连池的潜在问题。如果没有预期的响应内容,您可以使用body ToMono(Void.class)。但是请记住,如果响应确实有内容,连接将被关闭,不会放回池中。

问题:如果超时(…)触发TimeoutException在上面的代码中,我是否必须做一些明确的事情来确保所有资源都被正确释放,或者上面的代码是否足够?我想避免内存泄漏。

共有1个答案

牟辰龙
2023-03-14

我不认为这是一个问题,在这种情况下。

当被触发时,timeoutcancel()上行,有效地关闭连接,而不会将其返回到连接池。在这里,您不需要做任何特殊的事情,也不会出现内存泄漏(除了已经位于Reactor内部队列中的缓冲区,这是Spring框架将在SPR-17025中解决的问题)。

 类似资料:
  • 我有一个非常基本的JTA问题。 我们使用Spring的AOP将WebLogicJtaTransactionManager切入点应用于服务类中的任何方法......并且我们设置tx: method timeout="60"。 有趣的是在该服务中,我们运行一个select语句从数据库中检索记录(使用Hibernate/JPA),然后去做一些与数据库/事务无关的工作。该方法运行时间超过60秒,并且永远不

  • 在我的应用程序几分钟后尝试提交许多事务后,我会遇到以下异常: 无法提交jdbc事务嵌套异常为java.sql.sqlexception:jz006:catled IOException:java.net.socketTimeoutException:读取超时...“ 我正在使用Sybase和带有Spring JDBC的JDBC 4驱动程序,我找到了以下链接:http://infocenter.Sy

  • 这是我的servlet的doPost方法,理论上它在db中添加数据 这里是在db中插入数据的方法 但是,当我尝试使用servlet执行此操作时,出现了以下错误 错误1205(HY000):超出锁定等待超时; 有人知道如何解决?如果我对一个普通的java类做同样的事情,那么一切都很好。

  • osx和Win的文档中写道:“对于TCP套接字,返回值0表示对等方关闭了连接的一半。” 2)阻塞套接字的问题:在阻塞套接字上,我希望SO_RCVTIMEO和SO_SNDTIMEO有一个默认值,比如30秒(用getsockopt检查)。但是为什么它们被设置为0?

  • 我有一个非常大的HBASE/Phoenix表,我试图使用SQLLINE查询它。我得到以下异常。我尝试在客户端和服务器上更改各种设置: 我试着将以上所有设置为6000000,但仍然得到同样的问题。有什么想法吗?原来的异常似乎是hbaseClient.calltimeoutException。

  • 我在ASP.NET中使用窗体身份验证。我已将超时设置为1分钟。一旦我登录,如果经过身份验证,我将被重定向到主页(homepage.aspx)。这很好用。如果我远离网站,1分钟后回来,并试图访问任何其他页面,我将按预期重定向到登录页面。我的问题是,如果我回来做一些回发或刷新,那么只有我被重定向到登录页面,否则我将停留在同一个页面。如果我在1分钟后回来,我应该做什么才能登录页面出现在屏幕上。