RabbitMQ - 使用DefaultConsumer在消费者断开连接中幸存下来

时间:2014-04-08 15:35:42

标签: rabbitmq

使用java客户端QueueingConsumer我编写了以下代码来帮助消费者恢复

while (true) {
   try{
      .. create connection
      .. create channel & queue
      while (true) {
             final QueueingConsumer.Delivery delivery = consumer.nextDelivery();
             ....
      } catch {
          handleException()
      }
}

每次我重新启动兔子它都幸免于难,因为它从一开始就创建了连接 现在,我知道我应该使用DefaultConsumer 所以我有这个方法

public void handleDelivery(...) throws IOException {
}

我的问题是:

  1. 我无法捕获内部异常并重新创建连接
  2. 这只会在ack失败时恢复。如果在该过程的另一个阶段失败怎么办? 我该如何恢复这些失败?
    谢谢。

1 个答案:

答案 0 :(得分:4)

您应该更新到Rabbit Java Client的3.3.0版。最后,他们增加了对重新连接和重新声明拓扑的支持。

您只需在设置ConnectionFactory

时设置此项
...
connectionFactory.setAutomaticRecoveryEnabled(true);
connectionFactory.setTopologyRecoveryEnabled(true);
...