I'm working on comparing AMQP 1.0 clients with different brokers. In this case I have ActiveMQ (5.10) and Qpidd (trunk, proton at about 0.8) brokers on a Fedora 19 localhost. For the client I have a qpidmessaging client test that moves unreliable messages.
The test client program: For the full source please see http://people.apache.org/~chug/adverb_unreliable_400_50/hello_world.cpp 0. Uses 400 total messages with a 'batch' size of 50. 1. Creates a connection to: "chuck; {create:always, link: {reliability:unreliable}}" 2. Creates a sender and receiver each with capacity of 100. 3. Sends a batch to the broker 4. Loops sending and receiving batches of messages 5. Receives the final batch. The idea is to prime the broker with a batch of messages. Then send and receive batches so that the client receiver might never have to wait doing a fetch because the receiver's capacity will prefetch the messages. Results: 1. http://people.apache.org/~chug/adverb_unreliable_400_50/unreliable2_amq5.10_400_50.html 2. http://people.apache.org/~chug/adverb_unreliable_400_50/unreliable2_amq5.10_400_50_tcpnodelay.html 3. http://people.apache.org/~chug/adverb_unreliable_400_50/unreliable2_qpidd_400_50.html Notes: 1. Run 1 was ActiveMQ 5.10 with no options. 2. Run 2 was ActiveMQ 5.10 with amqp transport.tcpNoDelay=true 3. Run 3 was Qpidd (0.30+) with no options (tcpNoDelay=true by default). 4. Each trace has four consecutive runs of the test program on a fresh restart of the broker. 5. Statistics: Elapsed time (mS) Over-the-wire frames ------------------ -------------------- Run 1, ActiveMQ - stock : 261, 209, 209, 208 85, 73, 70, 68 Run 2, ActiveMQ - tcpNoDelay : 201, 180, 146, 123 459, 484, 459, 457 Run 3, Qpidd - stock : 16, 17, 17, 18 50, 55, 44, 73 It's notoriously hard to describe what a protocol is doing to make it faster/slower in one case or another. The trace web pages are an attempt at doing just that and are generated from post-processed Wireshark decodes. I hope this helps. -Chuck