RabbitMQ使用者不会收听UN-ACKED消息

时间:2013-08-14 21:18:35

标签: java rabbitmq amqp

我的消费者听队列。 Auto Ack = false。 - 如果我确认消息将从队列中删除。 - 如果我没有确认,RabbitMQ会按预期将消息放入队列。 我的问题是我的消费者没有继续听这些未经确认的消息。为了验证这一点,如果我发布了一条新消息,消费者就会把它拿起来。

以下是我的代码块。任何解决方案?

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;
        }
    }

1 个答案:

答案 0 :(得分:2)

你尝试过basic.reject吗? 如上所述in this blog entry,basic.reject会将它传递到同一个队列,而“RabbitMQ不会注意阻止同一个消费者再次收到消息”。所以这对你有用。

根据您的目的,您也可能对死信功能感兴趣。有关详细信息,请参阅here