Проблема: Когда внешний API не работает, requeue = true приводит к немедленной повторной доставке сообщения. Это создает бесконечный цикл, который потребляет большую нагрузку на процессор и заполняет мои журналы ошибками подключения, поскольку между повторными попытками нет задержки.
Код: Выделить всё
// Simplified logic
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
long deliveryTag = delivery.getEnvelope().getDeliveryTag();
try {
// ... JSON parsing and API call ...
if (response.statusCode() == 200) {
channel.basicAck(deliveryTag, false);
} else {
// This causes immediate redelivery loop
channel.basicNack(deliveryTag, false, true);
}
} catch (Exception e) {
channel.basicNack(deliveryTag, false, true);
}
};
- Использование Thread.sleep(): я хочу избежать этого, поскольку оно блокирует канал/соединение для других сообщений.
- Spring RabbitMQ: я ищу решение с использованием родного Java-клиента без переноса всего проекта на Spring.