- Using the "Get message" section of the UI, set "Ack mode" to "Reject requeue true"
- Click "Get Message(s)", and your message is shown, with an x-delivery-count header value of 0
- Click "Get Message(s)" again, and your message is shown, with an "x-delivery-count" header value of 1
- Click "Get Message(s)" again, and you are told "541 Cannot get a message from quorum queue 'queue 'dummy' in vhost '/'': noproc"
- Eventually the UI will display that the queue state is "down", with a tooltip that says "The queue is located on a cluster node or nodes that are down", although the sole node in the cluster is still online. You may need to attempt to interact with the queue again (e.g. get messages again) in order for the queue state to update in the UI.
Essentially the same results in a three-node cluster; although the queue
state doesn't transition to 'down', the leader changes to
"?" and the "online" list drops from 3 nodes to one node (no obvious
pattern to which node remains, sometimes it's the former leader,
sometimes it isn't). Regardless, attempting to consume from the queue fails. Actually, the leader and member loss can be observed to occur as soon as the message passes the delivery-limit threshold (e.g. immediately after step 3), before attempting to consume from the queue again.
Variations that don't change behavior:
- Same results if the dummy queue has x-dead-letter-exchange set
- Same results if you consume messages from code rather than the UI
- Same results if you bind the dummy queue to an exchange and publish messages to the exchange, rather than publishing directly to the queue
- Same results if x-delivery-limit is applied via policy rather than at queue creation
Variations that do change behavior:
- Works without error if you use "Nack messages requeue true" instead of "Reject requeue true"
- Works without error if you do not have x-delivery-limit set on the queue
Other notes:
I initially came across this while trying to come up with a minimum reproduction for a situation where there was no crash, but the x-delivery-limit was not being honored (that is, x-delivery-limit was set to 3 but the same message could be redelivered an arbitrary number of times). I can no longer reproduce my original error, however.
Has anyone else encountered anything like this?
Thanks,
- Adam Gardner