在nack之前删除队列会冻结我的应用程序

时间:2015-08-26 14:04:35

标签: go rabbitmq

我是rabbitmq的新手,我想知道在我可以在该队列上执行交付之前删除队列时遇到错误的最佳方法是什么。

if err := handle(); err != nil {
  delivery.Nack(false, true)
} else {
  delivery.Ack(false)
}

此代码的问题在于我们的队列是基于我们的调度程序外部的协调程序创建/删除的,因此当传递Nack并且队列被删除时,系统会挂起,因为它一直在尝试重新排队传递。

要解决问题,我可以检查一下:

delivery.Nack(false, true)

返回错误,我可以在那里处理它。但是,如果Nack方法返回错误,那么放弃此交付的最佳方法是什么?

注意:我使用https://github.com/streadway/amqp

1 个答案:

答案 0 :(得分:2)

  

此代码的问题是我们的队列是根据调度员外部的协调员创建/删除的,

这就是问题,就在那里。我会问你为什么要这样做,而不是让消费者定义它需要的队列和绑定?

除非能够提出问题/更改,deliver.Nack周围的错误处理程序可能是您的最佳选择。但我认为这是一个由更大的设计问题引起的问题的令人不快的解决方法