Producer flow control commented on by Rob Godfrey (Jul 21, 2008).

Comment:

A couple of comments...

Firstly, for 0-10, the flow control is on a per exchange basis for each individual session.  There is no reason to flow control every producer which has published to an exchange, you can (if you so wish) limit yourself to flow controlling only those sessions which are (historically) publishing to overfull queues.

In the AMQP context we are looking at producer side flow control to see what (if anything) needs to be done on this [for instance, it may be sufficient just to hold back completion notification, or use underlying network protocol flow control... alternatively we may use some finer grained notion of destination (exchange and routing-key pattern)]...   

In the Qpid 0-8/0-9 implementation we have no such fine-grained tools to help us - only the ability to turn on and off a channel at a time.  For this the only thing we can go on is past publishing history.  In terms of the architecture of the Java Broker I would be expecting two separate triggers that may cause flow control to be invoked

i) A large number of jobs have backed up for a given connection and have not yet been processed.  In this case I would expect flow control to be invoked on all channels on that connection.

ii) A given queue has gone beyond some threshold point.  Here we have some difficulty...  We may elect to issue (progressively) flow control to sessions which have (in the recent past) published to that queue...  Alternatively we may elect to simply cease processing jobs for a given connection if we find a job which would push a queue beyond it's threshold limit... This would then (eventually) invoke case above.

Reply via email to