qpid-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Barker" <mark.bar...@shaw.ca>
Subject C++ Qpid Messaging - API & Broker
Date Sat, 15 Mar 2014 22:16:06 GMT
(don't know how this got into the other thread - sorry, trying again...)

So I've been looking at running Qpid's C++ broker and a client on an
embedded target.
I need to transit some traffic from JMS clients and brokers on workstations
and route it elsewhere via an embedded platform.

One thing I've found is that some fairly innocuous looking Qpid receiver
code running under the C++ API can take orders of magnitude longer to run.

Some experiments just locally on a Ubuntu Linux box (12.04 LTS) reveal:
If I pre-fill a queue with 5000 * 1024-byte messages from a JMS source
client,
a local JMS consumer will take approximately 3s to drain it.

However, if, instead, I have some C++ Qpid Messaging API client just doing:

while(1)
{
   receiver.fetch();
   session.acknowledge();
}

on the same queue, this takes nearly 200s to consume the same data!!

Playing around with 2 parameters yields significant improvement - if I setup
the receiver with:
receiver.setCapacity(100),
and then ONLY session.acknowledge() once every 100 messages,
the C++ client's message consumption drops massively to just 250ms.

This leads me to ask the question:
What should the C++ code look like in order to most closely imitate what the
JMS equivalent is doing?
i.e.
The JMS client has an AUTO_ACKNOWLEDGE parameter on the session creation.
How can the C++ code
mimic this behaviour/performance?
And how does the C++ receiver capacity fit into the same equation??

Finally, when running the C++ qpidd broker on the embedded target, CPU usage
is really high when firing
a similar quantity of message data at it. An embedded broker daemon and
consuming client will quite happily max
out the CPU just for the task of messaging. I certainly don't see
tens-of-thousands of messages-per-second throughput. More like tens or
hundreds at best.

Are there options, strategies or guidelines for running such an arrangement
in a more efficient and less computationally intensive
manner (either in build-time options or command-line execution of the
broker, or structuring the client code in a specific way)??

Thanks for all practical advice!
Mark. 


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@qpid.apache.org
For additional commands, e-mail: users-help@qpid.apache.org


Mime
View raw message