Any time you talk about automatic retry in a messaging environment, you must invariably consider poison messages. A poison message is a message that cannot be retried because it will result in an error every single time.
A deadlock is a transient error. We can reasonably expect deadlocks and other transient errors to resolve by themselves without any intervention.
Poison messages, on the other hand, cannot resolve themselves. Sometimes this is because of an extended outage. Other times it is purely our fault—an exception we didn't catch, or an input condition we didn't foresee.
If we retry poison messages in perpetuity, they will create a blockage in the message processing pipeline. They will retry over and ...