I&#39;m not seeing the expected throughput on the consume side of things using the Java client API and looking for some suggestions. The way I&#39;ve set up my tests I create N=25 channels/queue consumers for a single queue (according to the java api docs you can&#39;t have more than one thread on a given channel at once) and then I have 50 threads that fill up the queue (publish throughput is fine) and then another 50 threads which pull from the queue. I synchronize on the channels and each thread uses round robin to to select a channel and queue consumer pair and uses that to do the consume and ack. But even after some twiddling I am not able to get beyond 50 reads per sec which is less than 10x what I am seeing on the publish side. Below is what the key code looks like. Any suggestions for what may be causing the slowness?<br>
<br>thanks,<br>Scott<br><br>Here is the consume code looks like:<br><br>��� Integer channelNum = pickRandomChannel();<br>��� Channel channel = getChannel( channelNum );<br>��� QueueingConsumer consumer = getConsumer( channelNum );<br>
��� synchronized (getChannel( channelNum )) {<br>����� try {<br>������� channel.basicConsume( getQueueName(), noAck, consumer ); //noAck = false here<br>����� } catch (IOException e) {<br>������� logger.warn( &quot;Exception when consuming message from queue: &quot; + getQueueName(), e );<br>
����� }<br>����� try {<br>������� QueueingConsumer.Delivery delivery = consumer.nextDelivery( this.defaultTimeout );<br>������� if (delivery == null) {<br>��������� return null;<br>������� }<br>������� return delivery.getBody()<br>
����� } catch (InterruptedException ie) {<br>������� logger.warn( &quot;Interruped exception on next delivery&quot;, ie );<br>������� return null;<br>����� }<br>��� }<br>