[rabbitmq-discuss] Direct vs Topic exchange - Question
konstantin.kalin at gmail.com
Wed May 2 17:09:14 BST 2012
Thank you for looking at this. Please see inline.
On May 2, 2012, at 6:34 AM, Simon MacMullen wrote:
> On 02/05/12 00:48, Konstantin Kalin wrote:
>> Test 1 - I run test for Direct exchange I get ~40k messages per second
>> according to RabbitMQ management plugin. CPU load is 80% on RabbitMQ
>> and Memory is always below the watermark. Seems to be good. RabbitMQ
>> management plugin shows "No flow" control on publishers connections.
>> Test 2 - I run same test for Topic exchange I get constantly ~4k
>> messages per second. CPU is around ~15% and Memory is ~200k out of
>> 1.5Gb on RabbitMQ node. RabbitMQ management plugin shows constant
>> "Flow" control on publishers connections.
> This is very odd, and not what I would expect at all.
> Topic exchanges are slower than direct exchanges - the routing logic is after all more complicated - but it certainly shouldn't be a factor of 10.
> Also, if you are pushing messages as fast as you can at Rabbit 2.8.0+, it should go into flow control regardless of where the actual bottleneck is.
> Can you post the code you were running?
Sure. Please look at attached file. It contains the source code that I runs. It can be compiled using rebar.
Here is short explanation for the code:
common - library module. It contains connection pool, publisher and consumer worker modules. I use connection pool since I also do testing for RabbitMQ cluster.
consumer - Consumer app. It's kinda stupid app with one supervisor to start consumer workers and API helpers functions. See consumer.erl
publisher - Publisher app. It's same as the consumer app. There is API module as well (publisher.erl)
All code is pretty straight forward. Connection pool accepts URLs and amount of connections per URL. It works in Round-Robin mode. Publisher does "basic.publish" and Consumer uses subscription.
I will continue digging it. What's odd for me RabbitMQ does "Flow control" when it seems to be fine: Memory and CPU are low on RabbitMQ node. It looks like there is no reason to do "flow control".
P.S. RabbitMQ node is VM with 8 CPUs and 4Gb memory.
> Cheers, Simon
> Simon MacMullen
> RabbitMQ, VMware
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 481510 bytes
Desc: not available
More information about the rabbitmq-discuss