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

Reply via email to