Reputation: 956
I am doing a POC to work with RabbitMQ and have a questions about how to listen to queues conditionally!
We are consuming messaging from a queue and once consumed, the message will be involved in an upload process that takes longer times based on the file size. And as the file sizes are larger, sometimes the external service we invoke running out of memory if multiple messages are consumed and upload process is continuing for the previous messages.
That said, we would like to only consume the next message from the queue once the current/previous message is processed completely. I am new to JMS and wondering how to do it.
My current thought is, the code flow will manually pull the next message from the queue when it completes the process of previous message as the flow knows that it has completed the processing but if that listener is only used in code flow to manually call, how it will pull the very first message!
Upvotes: 0
Views: 1210
Reputation: 4650
The JMS spec says that message consumers work sequentially:
The session used to create the message consumer serializes the execution of all message listeners registered with the session
If you create a MessageListener
and use that with your consumer, the JMS spec states the listener's onMessage
will be called sequentially, i.e. once per message after each message has been processed by the listener. So in effect each message waits until the previous has completed.
Upvotes: 0