We delay messages by a few minutes, in a few places. Reconsider whether that's still the best thing to do. It's nasty because we have to add delay logic to every queue consumer, and we delay by requeueing, so the delay can be very unpredictable during high load, and it takes time away from actually processing.
Instead, let's create a new "delayed" queue, perhaps one per delay duration. Its consumer stops once "delay until" is greater than the current time. Messages which are ripe for requeueing will be pushed back onto their home queue (still has the load issue).