[rabbitmq-discuss] odd consumer behaviour

Matthias Radestock matthias at lshift.net
Thu May 1 19:22:18 BST 2008


David,

David.Corcoran at edftrading.com wrote:
> 1. Run the HelloClient RabbitMQ example modified slightly so that it sends
> 20 messages instead of 1.
> 2. Run the HelloServer example but with a slight change to the code. Add a
> Thread.sleep(10*1000) before the return in handleStringCall().
> 3. Now run a normal HelloServer example, without any sleep.
> What I noticed here is that the normal example doesn't run at full speed.
> It looks like the slow server is slowing down the normal one.
> 5. Kill the slow server (the one with the sleep) and the normal HelloServer
> now runs at full speed and finishes the rest of the messages within the
> second.

How exactly did you modify the HelloClient? Did you just put the original

             System.out.println(service.stringCall(request));

in a 20-iteration loop?

If so, then you are issuing 20 RPCs sequentially, i.e. the client will 
be waiting for the result of the previous call before issuing the next.

Each call will be handled by one of the two HelloServers you are 
running. If a call gets handled by the "slow" server then it will take 
10 seconds to complete. If it happens to get handled by the fast server 
then it will complete nearly instantly. As soon as you stop the slow 
server all remaining requests will get handled by the fast server and 
hence complete quickly.

So the behaviour you are seeing is to be expected.

Were you trying to construct a load balancing test? If so you'd need to 
be issuing RPCs *concurrently*. Also, the RpcServer wasn't designed for 
load balancing - it will actually consume messages from the underlying 
AMQP queue as fast as it can without waiting for them to be processed. 
You'd have to change that.

Regards,

Matthias.




More information about the rabbitmq-discuss mailing list