[Not enough information] Does consumer delivery timeout requeue outstanding deliveries? #13774
-
I'm using rabbitmq 4.0.2 If I understand correctly the reason to have consumer_timeout is to catch "zombie" consumers who have taken a message but aren't going to ack\reject it. But what I'm experiencing doesn't seem to answer that need. This might fit with what the docs say "All the following deliveries on that channel, from all consumers, are then requeued" but not the current message? Is this really the expected behavior and if so why is it done that way and not requeue the current message as well? |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 2 replies
-
It closes the channel, so automatic requeueing should apply just like in any other case. @AharonSambol we will not speculate as to what happens in your tests since you haven't posted any code. We do not guess in this community. |
Beta Was this translation helpful? Give feedback.
-
Actually, if you see such stuck consumers as potentially a function of the message (known in the messaging space as "a poison message"), then it might even make some sense to discard the message. But that's not what RabbitMQ channels do when they detect a timed out consumer. They generate an channel exception, notify the client and terminate, nothing beyond that. The only scenario that I can think of where this can discard the message is if the message had a TTL that's also been hit by the time the message is requeued, then RabbitMQ must guarantee that an expired message was not (re)delivered further. |
Beta Was this translation helpful? Give feedback.
@AharonSambol I don't see why it would not be together with all the other messages.
Again, you haven't posted any code, and for as long as that's the case, there's nothing further to discuss. The feature does not try to discard the delivery, it simply closes the consumer channel with a specific message.