В настоящее время у меня есть 4 очереди:
- test-queue
- test-queue-short-term-dead-letter
- test-queue-long- term-dead-letter
- test-queue-parking-lot
Когда сообщение поступает в test-queue
, я проверяю, имеет ли сообщение правильный формат , Если это не Я хочу отправить сообщение непосредственно в очередь на стоянку .
Я не могу использовать AmqpRejectAndDontRequeue()
, потому что он автоматически отправит сообщение на настроенный DLQ ( тест-очередь кратковременная мертвая буква).
Использование RabbitTemplate.convertAndSend()
с другим исключением, таким как BadRequestException
, не работает. Сообщение отправляется в очередь на стоянку, как и ожидалось, однако такое же сообщение останется в test-queue
. Использование RabbitTemplate.convertAndSend()
само по себе не будет работать, так как программа продолжает выполнение.
Все очереди связаны с одним прямым обменом, каждый с уникальными ключами маршрутизации. test-queue
настроен со следующими аргументами:
x-dead-letter-exchange: ""
x-dead-letter-routing-key: <shortTermDeadLetterKey>
Получатель:
@RabbitListener(queues = "test-queue")
public void receiveMessage(byte[] person) {
String personString = new String(person);
if (!personString.matches(desiredRegex)) {
rabbitTemplate.convertAndSend("test-exchange", "test-queue-parking-lot",
"invalid person");
log.info("Invalid person");
}
...some other code which I dont want to run as the message has arrived in the incorrect format
}