The messages should be back to the queue as soon as you closed the connection/consumer.
Unless you're not closing the connection, leaving to be checked by the Time-to-live.
Make sure you close your connections properly when you finish the consumer. you should tweak TTL If you have no control over the kill on the client to make sure the dead connection is perceived earlier.
That's the way I understood it to work - however the commits dont seem to be working. I would expect that when a message is committed ( a receive ) it would be removed from the queue completely. My next request for a message from the queue should give me a different message - or none at all if the queue is now empty. Is commit the wrong thing to be using? is there a type of acknowledgement I should use?
You are certainly doing something wrong. This is such a common usecase.. .we would have lots of complaints about it if what say was a bug.
Are you using core-api or JMS api?
What version are you using?
If JMS: Queue or Topic?
How you ACK the messages?
How you created the session (if JMS).