2

我的消费者听一个队列。自动确认 = 假。- 如果我确认消息将从队列中删除。- 如果我没有确认,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;
        }
    }
4

1 回答 1

2

你试过basic.reject吗?如本博客条目所述,basic.reject 会将其传递到同一个队列,并且“RabbitMQ 不会注意阻止同一个消费者再次获取消息”。所以这应该适合你。

根据您要执行的操作,您也可能对死信功能感兴趣。请参阅此处了解更多信息。

于 2013-08-14T22:35:35.160 回答