This is a simple question, but I was not able to find an answer.
Suppose my message is placed to the retry queue (who creates the retry queue? Is it a WCF or a MSMQ service?)
After 5 minutes (that's my retry delay) that message gets back to the application queue.
Question: who moves a message from retry queue to the application queue after the timeout?
Bonus question: how the delay is being tracked? Does a message get a "moved" timestamp and "retry" timestamp?
According to this article Handling Poison Messages MSMQ 4 provides few new features that allow an application to handle poison messages using subqueues. These features are:
So it seems like actual move is handled by WCF, not MSMQ; and MSMQ simply now has facilities to support poison messages and retries handling.