[rabbitmq-discuss] Controlling over-producers

Edwin Fine rabbitmq-discuss_efine at usa.net
Wed May 7 16:14:48 BST 2008


Hi all

 I have looked at the FAQs, and the mailing list about this topic. This
 is what I know so far:

 1. I have an Erlang consumer (using the RabbitMQ Erlang client) that
 has registered using a basic.consume.

 2. The consumer often gets flooded with messages from the producer
 when it does some time-based operations. In Erlang, this means that
 the consumer's Erlang message queue grows to a couple hundred
 messages, which is not what I want. I want the producer to stop
 sending messages when the consumer is too busy.

 Messages must not be lost and are marked persistent, so I want them to
 stay on disk until the consumer acknowledges successful processing. Am
 I correct to assume RabbitMQ does this if I have marked the queue as
 persistent and have not replied to the basic.deliver with an ack?

 3. The channel.flow object is not currently implemented in RabbitMQ; I
 think this would be perfect to do this.

 4. IIRC, a suggestion was for the consumer to basic.cancel itself
 until the load reduces, and then re-subscribe (basic.consume) once the
 overflow condition has abated. This seems heavy-handed, and possibly
 resource-intensive, especially since it might happen relatively
 frequently.

 I'd appreciate any suggestions or clarifications.

 Regards,
 Edwin Fine
 Fine Computer Consultants




More information about the rabbitmq-discuss mailing list