我很好奇是否没有意外错误,在等待客户端确认消息(使用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) {
//
}
}
此外,正常情况下何时关闭通道?
答案 0 :(得分:0)
只要启用了心跳,它通常就不会超时(这是默认设置),但是长时间保持该状态的消息是一种反模式,正如我在对所提到的答案的评论中所建议的那样在上面的评论中。