У меня есть служба A, которая публикует сообщение в очереди (QA).У меня есть очередь недоставленных сообщений (DLQ), связанная с DLX с помощью DLRK.Очередь А ограничена обменом (EA) с помощью ключа маршрутизации (RA).Я также установил x-letter-exchange (DLX) и x-dead-letter-routing-key (DLRK) на QA с ttl-per-message в этой очереди равным 60 секундам. DLQ также установлен с помощью x-letter-exchange (EA) и x-dead-letter-routing-key (DLRK) с ttl-per-message в этой очереди до 60 секунд.
При указанной выше конфигурации я пытаюсь перенаправить сообщение в DLQ изQA после истечения ttl и наоборот.На стороне потребителя, которая является другой службой, я выбрасываю исключение AMQPRejectAndDontRequeueException со значением defaultRequeueRejected, равным fals.
Приведенная выше конфигурация работает нормально, когда потребитель работает, и выдает исключение
.Но я пытаюсь ограничить размер своей очереди до 1, а затем опубликовать 3 сообщения в QA, а также отключить потребителя.Я вижу все три сообщения, помещенные как в QA, так и в DLQ, и в конце концов все сообщения отбрасываются.Но если я не установлю предел очереди в 1 или не запустлю потребителя, все будет работать нормально.
Я также установил x-overflow для reject-publish, и когда есть переполнение, я получаю nackу издателя, а затем у меня есть планировщик, который публикует его снова в QA.
Примечание: оба обмена являются прямыми, и я использую ключи маршрутизации, чтобы связать его с соответствующей очередью.
Пожалуйста, дайте мне знать, если я что-то упустил здесь, и дайте мне знать, нужно поделиться моей конфигурации