[rabbitmq-discuss] Per-Connection Flow Control - RMQ 2.8.1

Simon MacMullen simon at rabbitmq.com
Wed Mar 28 13:42:00 BST 2012

On 28/03/12 11:32, Simon MacMullen wrote:
> I will try to reproduce based on the above, but anything else you can
> tell me would be a great help.

Hmm, I'm struggling with this.

I can certainly get into a state with a combination of x-message-ttl, 
lots of messages expiring, and enough memory pressure to push much of 
the queue onto disc, such that the queue performance fluctuates quite a 
bit (as it switches between accepting new messages / paging messages out 
to disc / paging them back in / expiring them).

But I can't get a message rate that works OK in this scenario with flow 
control disabled but blocks for long periods with it enabled. If the 
message rate is high enough for flow control to kick in, then it's also 
high enough for memory use to go up as messages wait to enter the queue 
if flow control is disabled. Eventually the memory alarm goes off instead.

So can you provide more information about your use pattern?

Having said that, if you just want to disable flow control and are 
prepared to build from source, you could apply the following patch:

diff -r f0dafaca6cd1 src/rabbit_reader.erl
--- a/src/rabbit_reader.erl	Mon Mar 26 17:12:41 2012 +0100
+++ b/src/rabbit_reader.erl	Wed Mar 28 13:40:03 2012 +0100
@@ -360,7 +360,7 @@

  control_throttle(State = #v1{connection_state = CS,
                               conserve_memory  = Mem}) ->
-    case {CS, Mem orelse credit_flow:blocked()} of
+    case {CS, Mem} of
          {running,   true} -> State#v1{connection_state = blocking};
          {blocking, false} -> State#v1{connection_state = running};
          {blocked,  false} -> ok = rabbit_heartbeat:resume_monitor(

But I would like to understand more about what you're seeing.

Cheers, Simon

Simon MacMullen
RabbitMQ, VMware

More information about the rabbitmq-discuss mailing list