在等待来自客户端的 channel.basicAck 时,通道可以保持活动状态多长时间
How long can channel keep alive while awaiting a channel.basicAck from the client
我很好奇如果没有意外错误,通道会在等待客户端确认消息(使用 channel.basicAck()
)时保持活动状态吗?频道是否有超时参数?
例如,如果xxx
很大,这段代码会不会有问题?:
@RabbitListener(queues = DURABLE_QUEUE)
public void listenAddAndDelete(@Payload Message message, Channel channel,@Header(AmqpHeaders.DELIVERY_TAG) long tag) {
log.info("receive user msg: {}", message);
// sleep very long time,then ack,is channel has a timeout?
Thread.sleep(xxx);
try {
channel.basicAck(tag,false);
} catch (IOException e) {
//
}
}
另外,正常情况下什么时候关闭频道?
只要启用心跳(这是默认设置),它通常不会超时,但长时间保持消息处于该状态是一种反模式,正如我在对答案的评论中所建议的那样在上面的评论中提到。
我很好奇如果没有意外错误,通道会在等待客户端确认消息(使用 channel.basicAck()
)时保持活动状态吗?频道是否有超时参数?
例如,如果xxx
很大,这段代码会不会有问题?:
@RabbitListener(queues = DURABLE_QUEUE)
public void listenAddAndDelete(@Payload Message message, Channel channel,@Header(AmqpHeaders.DELIVERY_TAG) long tag) {
log.info("receive user msg: {}", message);
// sleep very long time,then ack,is channel has a timeout?
Thread.sleep(xxx);
try {
channel.basicAck(tag,false);
} catch (IOException e) {
//
}
}
另外,正常情况下什么时候关闭频道?
只要启用心跳(这是默认设置),它通常不会超时,但长时间保持消息处于该状态是一种反模式,正如我在对答案的评论中所建议的那样在上面的评论中提到。