Just so I'm sure, you built this VSM by hand rather than generating it from the VSE recorder?
Do you have the 'Asynchronous' checkbox checked on the 'JMS Receive' side of your receive step? When asynchronous mode is enabled then messages on the queue will be drained to an internal queue in a separate thread, while the execution thread or threads process the messages. If you would like to disable this behavior, and only pull a message off the queue when it's being processed, then uncheck 'Asynchronous'.
If you generated the VSM from the VSE recorder then 'Asynchronous' is the default, but there is still a checkbox on the 'JMS VSE Listen' step to disable it. One final note: If your 'JMS VSE Listen' step has multiple request queues that it's listening on then Asynchronous is forced to be enabled, regardless of the checkbox value.