You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by rahuljoshi80 <ra...@siemens.com> on 2008/04/29 02:13:43 UTC

LoadTesting ActiveMQ for Synchronous Calls. (Consumer disappears)

I have a java Test Client that is using the javax.jms.TopicRequestor to send
a request on a topic. Below is a snippet of code of how the topicRequestor
call is made.

javax.jms.TopicRequestor requestor = new javax.jms.TopicRequestor(aSession,
aJmsTopic);
        javax.jms.Message response = requestor.request(msg);
        javax.jms.TextMessage textMessage = (javax.jms.TextMessage)
response;
     
As Seen above i am trying to make a synchronous call.
 
I have a C++ program on the other side of the Broker that is listening to
the "aJMSTopic" using a message Listener. When the C++ program receives a
msg, it takes this message and stores a <messageID,ReplyTodestination> pair
in a local map. When it is time to publish a reply , the C++ program knows
where to send the reply as it has the ReplyToDestination stored in a map.
Thus the java client gets the appropriate response.

The most interesting thing here is that this mechanism works perfectly until
i put it under some load. Lets say that the java test client just keeps
making these requests. After some time, the messageListener on the C++ side
will stop receiving messages from the java test client. 

There are no exceptions that occur in the activemq log files. Also, when the
messageListener stop receiving messages at that point i also noticed that
jconsole shows me that the consumer count for that particular topic is 0 !
So obviously the message listener is not listening to the message published
by the java test client. Why would this happen?


Has anyone tried to do a similar kind of load test...thats is synchronous
calling between a java and a C++ program on either side of the broker?

Any insight will be appreciated. Please help...we really need to get this
pattern to work.  I have tried several things including performing a 
consumer.receive (timeout) on the c++ side as opposed to using a
messageListener. 

Thanking you Sincerely
Rahul
-- 
View this message in context: http://www.nabble.com/LoadTesting-ActiveMQ-for-Synchronous-Calls.-%28Consumer-disappears%29-tp16948105s2354p16948105.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


RE: LoadTesting ActiveMQ for Synchronous Calls. (Consumer disappears)

Posted by "Mittler, Nathan" <na...@sensis.com>.
Can you verify that things work fine when using a Java client to receive
the messages?  If so, it sounds like a C++ client bug - I recommend
raising a JIRA issue and attaching a sample program if you can cook one
up quickly.

Nate

> -----Original Message-----
> From: rahuljoshi80 [mailto:rahul.joshi@siemens.com]
> Sent: Monday, April 28, 2008 5:14 PM
> To: users@activemq.apache.org
> Subject: LoadTesting ActiveMQ for Synchronous Calls. (Consumer
disappears)
> 
> 
> I have a java Test Client that is using the javax.jms.TopicRequestor
to
> send
> a request on a topic. Below is a snippet of code of how the
topicRequestor
> call is made.
> 
> javax.jms.TopicRequestor requestor = new
> javax.jms.TopicRequestor(aSession,
> aJmsTopic);
>         javax.jms.Message response = requestor.request(msg);
>         javax.jms.TextMessage textMessage = (javax.jms.TextMessage)
> response;
> 
> As Seen above i am trying to make a synchronous call.
> 
> I have a C++ program on the other side of the Broker that is listening
to
> the "aJMSTopic" using a message Listener. When the C++ program
receives a
> msg, it takes this message and stores a <messageID,ReplyTodestination>
> pair
> in a local map. When it is time to publish a reply , the C++ program
knows
> where to send the reply as it has the ReplyToDestination stored in a
map.
> Thus the java client gets the appropriate response.
> 
> The most interesting thing here is that this mechanism works perfectly
> until
> i put it under some load. Lets say that the java test client just
keeps
> making these requests. After some time, the messageListener on the C++
> side
> will stop receiving messages from the java test client.
> 
> There are no exceptions that occur in the activemq log files. Also,
when
> the
> messageListener stop receiving messages at that point i also noticed
that
> jconsole shows me that the consumer count for that particular topic is
0 !
> So obviously the message listener is not listening to the message
> published
> by the java test client. Why would this happen?
> 
> 
> Has anyone tried to do a similar kind of load test...thats is
synchronous
> calling between a java and a C++ program on either side of the broker?
> 
> Any insight will be appreciated. Please help...we really need to get
this
> pattern to work.  I have tried several things including performing a
> consumer.receive (timeout) on the c++ side as opposed to using a
> messageListener.
> 
> Thanking you Sincerely
> Rahul
> --
> View this message in context:
http://www.nabble.com/LoadTesting-ActiveMQ-
> for-Synchronous-Calls.-%28Consumer-disappears%29-
> tp16948105s2354p16948105.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.