2013-08-14 3 views
2

Мой потребитель слушает очередь. Auto Ack = false. - Если сообщение ACK будет удалено из очереди. - И если я не сделал ACK, RabbitMQ поставит сообщение в очередь, как ожидалось. Моя проблема заключается в том, что мой потребитель не ПРОДОЛЖАЕТСЯ СЛУШАТЬ К ТЕАМ-АКТИВНЫМ сообщениям. Чтобы убедиться, что, если я разместил новое сообщение, потребитель взял его.RabbitMQ потребитель не слушает сообщения UN-ACKED

Следующий мой кодовый блок. Любое решение?

while (true) { 
     try { 
      QueueingConsumer.Delivery delivery = consumer.nextDelivery(); 
      String message = new String(delivery.getBody()); 
      String response = sendEndpoint(message); 
      if (!response.equals(ERROR_CODE)) { 
       channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); 
      } 
     } catch (InterruptedException ignore) { 
      continue; 
     } 
    } 

ответ

2

Вы попробовали basic.reject? Как указано in this blog entry, basic.reject отправит его в ту же очередь и «RabbitMQ не заботится о том, чтобы тот же самый потребитель снова получал сообщение». Так что это должно сработать для вас.

В зависимости от того, что вы пытаетесь сделать, вам также может быть интересна функция мертвой буквы. См. here для получения дополнительной информации.

Смежные вопросы