Replies: 1 comment
-
Are you sure it is the cycle detection that is tripping you up? I just did a very simple test where I returned messages to a qq until the delivery limit and the message was forwarded to the configured dead letter queue. Can you give us the simplest possible runnable example of this issue? btw, in RabbitMQ 4.3 we are planning a change to the behaviour of quorum queue deliver limits. It isn't correct to evaluate the delivery limit against explicit returns (requeue=true). The delivery limit from 4.3 will only be evaluated against failed processing (e.g. when the channel is terminated before an ack / settlement). |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
Community Support Policy
RabbitMQ version used
4.1.0
Erlang version used
27.3.x
Operating system (distribution) used
RKE2 kubernetes, nodes running on ubuntu 24.04
How is RabbitMQ deployed?
Kubernetes Operator(s) from Team RabbitMQ
rabbitmq-diagnostics status output
Logs from node 1 (with sensitive values edited out)
Logs from node 2 (if applicable, with sensitive values edited out)
No response
Logs from node 3 (if applicable, with sensitive values edited out)
No response
rabbitmq.conf
CRD based
Steps to deploy RabbitMQ cluster
operator used
Steps to reproduce the behavior in question
queues (quorum type)
exchanges
bindings
policies
advanced.config
No response
Application code
No response
Kubernetes deployment file
What problem are you trying to solve?
I try to create "retry" logic by using DLX with TTL. That is, I create intentional dead-letter cycle where source queue's "src" dead messages are sent to "dead-letter" queue. The dead-letter queue has TTL and DLX set so as the messages go back to src queue.
According to documentation, there has to be rejection so as the cycle is broken. It works great when i reject the message with requeue set to false.
However, the message is dropped when i nack or reject the message with requeue set to true. Let's take an example when I have multiple consumers of src queue and one consumer has some trouble processing the message (not enough resources, disconnected dependency, etc.). In that case I'd like to nack the message with requeue so another consumer can take it. The requeue works great, until delivery-limit is hit. Then the message should go to dlq, but is dropped instead because of dead-letter cycle detection.
I can see reason behind cycle detection, but I don't think it is rabbit's responsibility to enforce it this way. And what about multiple nacks? The reject doesn't support bulk processing.
Beta Was this translation helpful? Give feedback.
All reactions