Author |
Message
|
smalltalk2k |
Posted: Tue May 03, 2005 5:52 am Post subject: Is this way of listening for JMS messages inefficient? |
|
|
Novice
Joined: 03 May 2005 Posts: 10
|
The message class below is javax.jms.Message
The reciever is javax.jms.QueueReceiver.
Is this way of reading a Queue grossly inefficient for a system that would recieve roughly 40,000 straight mq messages in a 24 hour period. I'm asking in reference to the reciever.recieve(1) and the while loop. The system.out message of course would be removed.
The messages would be about 40 characters in length.
Code: |
while (!isStopped()) {
Message m = receiver.receive(1);
if (m != null) {
if (m instanceof TextMessage) {
message = (TextMessage) m;
System.out.println(
Messages.getString("JMS_TEST.MESSAGE_RECIEVED_PREFIX") + message.getText()); //$NON-NLS-1$
if (message.getText().equalsIgnoreCase(Messages.getString("JMS_TEST.STOP")) //$NON-NLS-1$
|| message.getText().equalsIgnoreCase(Messages.getString("JMS_TEST.EXIT"))) { //$NON-NLS-1$
stopLoop();
}
} else {
System.out.println(
Messages.getString("JMS_TEST.MESSAGE_NON_TEXT_RECIEVED")); //$NON-NLS-1$
stopLoop();
}
}
} |
|
|
Back to top |
|
 |
fjb_saper |
Posted: Tue May 03, 2005 11:48 am Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
I would like to see a MessageListener pattern applied here.
Remember as well to add a ConnectionErrorListener.
Enjoy  |
|
Back to top |
|
 |
dwitherspoon |
Posted: Tue May 24, 2005 12:18 pm Post subject: Caveat... |
|
|
 Acolyte
Joined: 09 Dec 2003 Posts: 59
|
A caveat to this is that if you want a graceful shutdown, you may have to resort to your first idea. That way you can be in a while (!stop) loop, and inside you do receive(x). Then every x millis you can be checking to see if you should gracefully stop.
This is what I do, but i have x set to 15 seconds...saying that I'm willing to wait 15 seconds (7 on average) for a graceful shutdown to happen. _________________ Good...Fast...Cheap. Choose any two. |
|
Back to top |
|
 |
fjb_saper |
Posted: Tue May 24, 2005 12:25 pm Post subject: |
|
|
 Grand High Poobah
Joined: 18 Nov 2003 Posts: 20756 Location: LI,NY
|
You can also do a gracefull shutdown with a message listener.
a) stop the connection
b) set the MessageListener to null on the Consumer
c) set the ExceptionListener to null
d) release all JMS resources
Enjoy |
|
Back to top |
|
 |
dwitherspoon |
Posted: Tue May 24, 2005 12:31 pm Post subject: |
|
|
 Acolyte
Joined: 09 Dec 2003 Posts: 59
|
I actually had some trouble doing this because I was trying to shut things down from one thread while the listener thread was trying to process a message. I probably screwed it up because I was under the gun, so I punted and went back to the loop thing. _________________ Good...Fast...Cheap. Choose any two. |
|
Back to top |
|
 |
|