【发布时间】:2022-01-04 13:29:02
【问题描述】:
在 Publisher 确认的上下文中,当等待 CorrelationData 的未来 (SettableListenableFuture#get()) - 它是无限期等待还是在水下配置了超时?
【问题讨论】:
标签: java asynchronous rabbitmq timeout spring-amqp
在 Publisher 确认的上下文中,当等待 CorrelationData 的未来 (SettableListenableFuture#get()) - 它是无限期等待还是在水下配置了超时?
【问题讨论】:
标签: java asynchronous rabbitmq timeout spring-amqp
它确实会无限期地等待。没有任何意见,所有内容都直接委托给 java.util.concurrent.FutureTask 内部的 org.springframework.util.concurrent.SettableListenableFuture 实现。
不知道为什么会出现这个问题,但在正常情况下,当经纪人启动时,它会在合理的有限时间内回答确认。如果代理不可用,您将在代码中到达CorrelationData.getFuture() 之前失败。
【讨论】:
get()。如果在收到确认之前关闭通道,框架将异常完成未来,但通常最好的做法是始终使用超时。
vm_memory_high_watermark 并因此阻塞连接的情况。我正在尝试确定适当的超时,并认为如果它在某个时候抛出异常本身可能不需要它。这是因为阻塞的连接不会导致任何地方的异常。
ConnectionBlockedEvent 用于此目的:docs.spring.io/spring-amqp/docs/current/reference/html/…