Наше приложение использует org.springframework.cloud, инфраструктуру spring-cloud-starter-stream-rabbit, и мы стараемся избегать отправки определенных сообщений в DLQ, а также повторять их, это поведение должно быть каким-то динамическим, потому что длясообщения по умолчанию, повторные попытки и DLQ должны работать.
Согласно этой документации:
Собираем все вместе
И этот полезный пост:
DLX в rabbitmq и spring-rabbitmq - некоторые соображения об отклонении сообщений
Кажется, что ImmediateAcknowledgeAmqpException
может использоваться в весеннем AMQP для пометки сообщения как подтвержденного и без дальнейшей обработкиЭто.Однако, когда мы используем этот код:
@StreamListener(LogSink.INPUT)
public void handle(Message<Map<String, Object>> message) {
if (message.getPayload().get("condition1").equals("abort")) {
throw new ImmediateAcknowledgeAmqpException("error, we don't want to send this message to DLQ");
}
...
}
Сообщение всегда отправляется в DLQ
Наша текущая конфигурация:
spring.cloud.stream:
bindings:
log:
consumer.concurrency: 10
destination: log
group: myGroup
content-type: application/json
rabbit.bindings:
log:
consumer:
autoBindDlq: true
republishToDlq: true
transacted: true
Мы что-то упустили?Есть ли другая альтернатива, чтобы избежать публикации в DLQ и постановки в очередь?