Hi, Gary!
Let me throw in my two fingers.
Why don't you use here `while` cycle logic as it is done for `AmqpRejectAndDontRequeueException` below?
Why that `while` doesn't have `break` if it has found `AmqpRejectAndDontRequeueException`?
And maybe it doesn't make sense to do ` while (shouldRequeue && t != null) { ` if we've already found `MessageRejectedWhileStoppingException`?..