the broker will handle any redelivery due to exceptions within the application (i.e. the application crashed mid processing and failed to ack). yep, simply no ACK means back to the queue for next available consumers. the referred blog post mentioned the pre-requisites such as marking the message DMQ-eligible and setting the TTL or redelivery counts. Do note that if there’s no TTL being set, there’s a possibility that the message stays in ‘unacknowledged’ state indefinitely until the client disconnects/unbind in this scenario of failed to ACK or No ACK.
If within the handler i encounter any failed operations such as an API call and want to retry the call after a certain amount of time, this should be handled within the handler code. That is one option, but not necessarily the only way or the correct way
However, what happens if after all my retries I decided that the message cannot be successfully processed? Can i simply call publish( ) to publish the event to a DMQ ? In general, you can just leave the message to expiry and moved to DMQ.
There is also an upcoming feature to send Reject or Failed ACK, so a Negative ACK basically. This might be useful if you need an immediate send to ACK and can’t afford the expiration wait.