在等待客户端的channel.basicAck时,频道可以保持多长时间

问题描述 投票:2回答:1

我很好奇是否没有意外错误,在等待客户端确认消息时(使用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) {
      //
    }
  }

此外,通常情况下何时关闭通道?

java rabbitmq spring-rabbitmq
1个回答
0
投票

只要启用了心跳,它通常就不会超时(这是默认设置),但是将消息长时间保持在该状态是一种反模式,正如我在评论中提到的答案中所建议的那样上面的评论。

© www.soinside.com 2019 - 2024. All rights reserved.