Hi Todd,
My suggestion for a delayed delivery would be to do something like: Use two queues and an intermediate set. Messages are posted to the first queue (Queue A), where they are popped off immediately by some service that you will write, here they are entered into the intermediate set (so they are not lost if a node dies); this service also has a timer task that will periodically wake and transition any messages that have expired.
When a message expires, it should then be posted to the second queue (Queue B) - where it continues its journey to the rest of your application.
So; your consumers will register with Queue B, and you will post messages to Queue A.
This will allow you to have a delay in messages, but I am a little confused with the expiration and the term durable queues - are you using this in the same context as used with ActiveMQ / RabbitMQ?
Hope that helps,
ryan