我的消费者听队列。 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;
}
}
答案 0 :(得分:2)
你尝试过basic.reject吗? 如上所述in this blog entry,basic.reject会将它传递到同一个队列,而“RabbitMQ不会注意阻止同一个消费者再次收到消息”。所以这对你有用。
根据您的目的,您也可能对死信功能感兴趣。有关详细信息,请参阅here。