[rabbitmq-discuss] Performance question

Roshan Punnoose rpunnoose at proteus-technologies.com
Wed May 27 01:45:29 BST 2009


Thank you. That makes sense. Are there examples of using a fanout exchange
with the Java api? I will also definitely start looking into using the C
api. 


On 5/26/09 3:05 PM, "Alexis Richardson" <alexis.richardson at gmail.com> wrote:

> Roshan

The easiest way to increase performance is to change what you are
> measuring ;-)

Here is an analysis of the tests you are referring to.  Note
> that a 16
core machine was used, plus some compression and batching
> using
OPRA/FAST.  Also the rates are ingress plus egress (fanout ratio of
4).
> This is very different from the case you describe which appears
to be a single
> stream.  10k mps ingress per core isn't bad.  Why don't
you try using a fanout
> exchange to increase the message output from
the broker?  Another tip is to
> use a C client.  The Java client may
limit you.

Let us know how you get
> on.

alexis




On Tue, May 26, 2009 at 5:31 PM, Roshan
> Punnoose
<rpunnoose at proteus-technologies.com> wrote:
> I have a one producer,
> one consumer queue running locally for a performance
> test. In terms of just
> server and client configuration, what is the best way
> to increase
> performance. For a simple queue publisher and consumer, I¹m
> getting about
> 10k a second for simple byte messages.
>
> Here is some of the code:
>
>
> Publisher:
> channel.exchangeDeclare("exchangename", "direct");
>
>                    channel.queueDeclare("queuename");
>
>                    channel
>
>                            .queueBind("queuename", "exchangename",
>
>                                    "routingKey");                    byte[]
>
> messageBodyBytes = new byte[0];                    int count = 0;
>
>                    long start = System.currentTimeMillis();
>
>                    String name = Thread.currentThread().getName();
>
>                    for (int i = 0; i < 100000; i++) {
>
>                        channel.basicPublish("exchangename", "routingKey",>
>                                null, messageBodyBytes);
>
>                        count++;                        if
>
> ((System.currentTimeMillis() - start) > 1000) {
>
>                            System.out.println(name + "-" + count);
>
>                            count = 0;                            start =
>
> System.currentTimeMillis();                        }
>                    }
>
>
> Consumer:
> channel.basicConsume("queuename",
> false, new DefaultConsumer(channel) {
>            int count = 0;
>            long start =
> System.currentTimeMillis();            @Override
>            public void
> handleDelivery(String consumerTag, Envelope
> envelope,
>                    BasicProperties properties, byte[] body)
> throws
> IOException {                count++;                if
>
> ((System.currentTimeMillis() - start) > 1000) {
>
>                    System.out.println(count);                    count = 0;
>
>                    start = System.currentTimeMillis();                }
>
>                this.getChannel().basicAck(envelope.getDeliveryTag(), false);
>
>            }        });
>
> Is there some way I can increase the performance?
> From the tests I have seen
> online, I hear numbers of millions of messages a
> second.
>
> Roshan
> _______________________________________________
>
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
>
> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>
>






More information about the rabbitmq-discuss mailing list