ASG
IBM
Zystems
Cressida
Icon
Netflexity
 
  MQSeries.net
Search  Search       Tech Exchange      Education      Certifications      Library      Info Center      SupportPacs      LinkedIn  Search  Search                                                                   FAQ  FAQ   Usergroups  Usergroups
 
Register  ::  Log in Log in to check your private messages
 
RSS Feed - WebSphere MQ Support RSS Feed - Message Broker Support

MQSeries.net Forum Index » IBM MQ Java / JMS » Too many MQGET_REPLY 2033 messages are replied.

Post new topic  Reply to topic
 Too many MQGET_REPLY 2033 messages are replied. « View previous topic :: View next topic » 
Author Message
John W
PostPosted: Tue Feb 28, 2006 9:37 am    Post subject: Too many MQGET_REPLY 2033 messages are replied. Reply with quote

Newbie

Joined: 27 Feb 2006
Posts: 3

Hello there,

We currently have two web applications that implement standard JMS APIs. Both apps are deployed on websphere 5.1 which has WMQ client installed. The WMQ client in turn connects to a queue manager (created on a WMQ 5.3 server) that runs on a separate node from the WAS node. In the app servlet init() methods, we make JMS connections to the queue provider, including temporary queues and one permanent queue. The connection seems to work fine since we are definitely getting messages through from one app to the other. However, such message flow could sometimes take 10 to 20 seconds.

We tried ethereal to do packet sniff on the WMQ server node. The initial connection message flow shows nothing unusual. I am listing part of the flow here:

INITIAL_DATA
INITIAL_DATA: CHL=SYSTEM.DEF.SVRCONN QM=MY_QMGR
USERID_DATA
MQCONN: App=Websphere QM=MY_QMGR
MQCONN_REPLY
MQINQ
MQINQ_REPLY
MQOPEN Obj=MY_QUEUE
MQOPEN_REPLY Obj=MY_QUEUE
MQINQ
MQINQ_REPLY
MQINQ
MQINQ_REPLY
INITIAL_DATA
INITIAL_DATA
INITIAL_DATA
INITIAL_DATA: CHL=SYSTEM.DEF.SVRCONN QM=MY_QMGR
...


After the initial message flow completes in a few seconds, we start to see the following message pair to repeat in every other 10ms or so and the flow goes forever.

MQGET
MQGET_REPLY [RC=2033]
MQGET
MQGET_REPLY [RC=2033]
MQGET
MQGET_REPLY [RC=2033]

...

We figured this ever-going flow is the root cause why the app message flow is being delayed. We would like to know what is causing such infinite MQGET and MQGET_REPLY flow. Any direction to solving this issue or help would be greatly appreciated.

Thanks a lot.
Back to top
View user's profile Send private message
mvic
PostPosted: Tue Feb 28, 2006 9:43 am    Post subject: Re: Too many MQGET_REPLY 2033 messages are replied. Reply with quote

Jedi

Joined: 09 Mar 2004
Posts: 2080

What code levels please (fixpacks, CSDs etc.)? Both WAS and WMQ code levels will help in fully describing the system.
Back to top
View user's profile Send private message
John W
PostPosted: Tue Feb 28, 2006 10:08 am    Post subject: Reply with quote

Newbie

Joined: 27 Feb 2006
Posts: 3

Thanks for the quick reply. The WAS is 5116 and WMQ is 5.3 CSD01.
Back to top
View user's profile Send private message
mvic
PostPosted: Tue Feb 28, 2006 12:42 pm    Post subject: Reply with quote

Jedi

Joined: 09 Mar 2004
Posts: 2080

John W wrote:
Thanks for the quick reply. The WAS is 5116 and WMQ is 5.3 CSD01.

I'm not sure about the WAS level, but the WMQ is very downlevel. That code (if memory serves) was released in October 2002. There have been a LOT of fixes for problems reported by customers in that time. The current maintenance is CSD12, which appears to be a good one, as far as we can tell so far.

I would strongly recommend you upgrade to CSD12 if at all possible.
Back to top
View user's profile Send private message
vennela
PostPosted: Wed Mar 01, 2006 12:06 am    Post subject: Reply with quote

Jedi Knight

Joined: 11 Aug 2002
Posts: 4055
Location: Hyderabad, India

First of all I don't see anything wrong with you getting 2033s
All it is saying is there are no messages available, because the app is polling for messages.
What is that you are trying to achieve?

Quote:
Why are you asking on here? It is your app that is doing it!

The suggestion is to upgrade the maintenance level to make your life easier.
Back to top
View user's profile Send private message Send e-mail Visit poster's website
John W
PostPosted: Wed Mar 01, 2006 4:56 am    Post subject: Reply with quote

Newbie

Joined: 27 Feb 2006
Posts: 3

After CSD12 has been updated on WMQ server, it does not seem to make any difference. We are still getting the infinite message flow. The message description in the packet shows blank for both queue and queue manager properties. As far as JMS coding goes in the applications, we basically send message through a permanent queue and create temporary dynamic queues for the replies. Nothing fancy!
Back to top
View user's profile Send private message
jefflowrey
PostPosted: Wed Mar 01, 2006 5:07 am    Post subject: Re: Too many MQGET_REPLY 2033 messages are replied. Reply with quote

Grand Poobah

Joined: 16 Oct 2002
Posts: 19981

John W wrote:
We figured this ever-going flow is the root cause why the app message flow is being delayed. We would like to know what is causing such infinite MQGET and MQGET_REPLY flow. Any direction to solving this issue or help would be greatly appreciated.


Okay, this is not likely the root cause of the problem. The infinite loop you are seeing is simply how the application is written. Now, it could be a contributer to the problem, that it is looping so fast - typically one would code the GET to include a wait time. Then it will sit and wait for the next message , and return immediately when the message is available.

So it's somewhat inefficient, but it's not the cause of your problem likely. How are you measuring that sometimes the message takes 10 to 20 seconds? What steps count in that time - from the send on one side to the receipt on the other, or is application processing counted? Are messages being put using syncpoint? If so, is there a delay between when they are put and when the put is committed?
_________________
I am *not* the model of the modern major general.
Back to top
View user's profile Send private message
docbill
PostPosted: Wed Mar 01, 2006 7:39 am    Post subject: Re: Too many MQGET_REPLY 2033 messages are replied. Reply with quote

Newbie

Joined: 01 Mar 2006
Posts: 2

jefflowrey wrote:

Okay, this is not likely the root cause of the problem. The infinite loop you are seeing is simply how the application is written. Now, it could be a contributer to the problem, that it is looping so fast - typically one would code the GET to include a wait time. Then it will sit and wait for the next message , and return immediately when the message is available.


I find this reference to "GET" confusing. A standard J2EE application does not call "MQ GET" directly. I expect this is called indirectly via the QueueConnection.

The application calls "MessageConsumer.receive". Depending on which part of the code it calls one of:
MessageConsumer.receive(50L)
MessageConsumer.receive(30000L)
MessageConsumer.receiveNoWait()

However, we did a small test servlette that only used:
MessageConsemer.receive(30000L)
on both a permanent and temporary queue.

We received hundreds of 2033 even with this test servlette.

Not surprising, since QueueConnection should be looping in the background to poll the MQ Queue with a timing that is indepentant of what we specify with the receive call. Otherwise receiveNoWait() would NEVER work.

Bill
Back to top
View user's profile Send private message
mvic
PostPosted: Wed Mar 01, 2006 9:03 am    Post subject: Re: Too many MQGET_REPLY 2033 messages are replied. Reply with quote

Jedi

Joined: 09 Mar 2004
Posts: 2080

docbill, are you working with John W?

How often are the MQGET calls being made inside your MessageConsumer.receive(30000L) call? And are you sure this is the only MessageConsumer in the system that's active at the time?

John W, if you are just calling MessageConsumer.receive(30000L) or something similar I would not expect MQGET calls separated by 10 ms. This sounds like a problem worth reporting.

If, on the other hand, the call is MessageConsumer.receive(10) then remember the 10 is milliseconds not seconds.

(Also, check whether you're using MQConnectionFactory.setPollingInterval() or the equivalent JMSAdmin property POLLINGINT. Again note the units taken for the polling interval is milliseconds).

EDIT: fix typos


Last edited by mvic on Wed Mar 01, 2006 6:26 pm; edited 1 time in total
Back to top
View user's profile Send private message
docbill
PostPosted: Wed Mar 01, 2006 11:13 am    Post subject: Reply with quote

Newbie

Joined: 01 Mar 2006
Posts: 2

Yes John and I are referring to the same application.

I was mistaken. Even the simple application I wrote for testing was not doing just receive(30000L). Like the real application one of the threads it was looping:

void Message getMessage() {
Message retval=null;
do {
retval=consumer.receiveNoWait();
if(retval != null) break;
retval=tempConsumer.receive(50L);
} while(retval == null);
return retval;
}

Each receive call does seem to correspond to one 2033 message. I changed this test simply to do:

void Message getMessage() {
Message retval=null;
do {
retval=consumer.receive(30000L);
} while(retval == null);
return retval;
}

With the MQ configuration John described no messages were received. (The build worked flawlessly on Sun MQ...)

I then reduced the time to 500L, and message were received quickly perminent queue.

So it seems receive isn't working on perminent queues if the receive time is greater than some threshhold value.

I then tried the same test with a temporary Queue. For wait times of 30000 and 500 ms no messages were received. But for a wait time of 50 ms the messages were received after about 4 seconds.

So it looks like the 2033 messages are simply 1 per receive not a problem. The real problem of messages on the temporary qeue only being delivered when we poll very frequently and taking a long time to deliver still exist.

Bill
Back to top
View user's profile Send private message
fjb_saper
PostPosted: Wed Mar 01, 2006 12:08 pm    Post subject: Reply with quote

Grand High Poobah

Joined: 18 Nov 2003
Posts: 20756
Location: LI,NY

That I don't quite get.

The wait intervall has nothing to do with whether the message is going to be delivered or not.

a) a message is on the queue in a gettable state (important)
receiveNoWait() will give you the message,
receive(10L) will give you the message,
receive(10000L) will give you the message,
receive(100000L) will give you the message.

b) if you are talking about a request response scenario be aware of following:
1) you will only get a response from the server application if you did commit the request and the server committed the response...
2) It will take some time for the message to go through the network and for the serving app to reply. MQ is not responsible for this amount of time but the requester will still have to deal with it.
3) the time is expressed in milliseconds, so 500 is half a second !
4) You need to find out what the average response time is and check whether it is acceptable to your application. Start with something outrageous like 100000L or one hundred seconds and have your app log the time difference from before and after the receive....

Enjoy
_________________
MQ & Broker admin
Back to top
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic  Reply to topic Page 1 of 1

MQSeries.net Forum Index » IBM MQ Java / JMS » Too many MQGET_REPLY 2033 messages are replied.
Jump to:  



You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
Protected by Anti-Spam ACP
 
 


Theme by Dustin Baccetti
Powered by phpBB © 2001, 2002 phpBB Group

Copyright © MQSeries.net. All rights reserved.