Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

General Information

The Qpid 0.6 release introduces a simplistic producer-side flow control mechanism into the Java Messaging Broker, causing producers to be flow-controlled when they attempt to send messages to an overfull queue.

Server configuration

Configuring a Queue to use flow control

Flow control is enabled on a producer when it sends a message to a Queue which is "overfull". The producer flow control will be rescinded when all Queues on which a producer is blocking become "underfull". A Queue is defined as overfull when the size (in bytes) of the messages on the queue exceeds the "capacity" of the Queue. A Queue becomes "underfull" when its size becomes less than the "flowResumeCapacity".

...

Where no flowResumeCapacity is set, the flowResumeCapacity is set to be equal to the capacity. Where no capacity is set, capacity is defaulted to 0 meaning there is no capacity limit.

Disk quotas

Broker Log Messages

There are four new Broker log messages that may occur if flow control through queue capacity limits is enabled.

Firstly, when a capacity limited queue becomes overfull, a log message similar to the following is produced

Code Block

MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1003 : Overfull : Size : 1,200 bytes, Capacity : 1,000

Then for each channel which becomes blocked upon the overful queue a log message similar to the following is produced:

Code Block

MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1005 : Flow Control Enforced (Queue MyQueue)

When enough messages have been consumed from the queue that it becomes underfull, then the following log is generated:

Code Block

MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1004 : Underfull : Size : 600 bytes, Resume Capacity : 800

And for every channel which becomes unblocked you will see a message similar to:

Code Block

MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1006 : Flow Control Removed

Obviously the details of connection, virtual host, queue, size, capacity, etc would depend on the configuration in use.

Client impact and configuration

...

Code Block
-Dqpid.flow_control_wait_failure=60000
-Dqpid.flow_control_wait_notify_period=10000

Failover issues

Older Clients

This feature was added for the 0.6 releaase of the Java Broker. If an older client connects to the broker then the flow control commands will be ignored and they will not be blocked. So to fully benefit from this new feature both Client and Broker need to be at least version 0.6.

Broker Log Messages

There are four new Broker log messages that may occur if flow control through queue capacity limits is enabled.

Firstly, when a capacity limited queue becomes overfull, a log message similar to the following is produced

Code Block

MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1003 : Overfull : Size : 1,200 bytes, Capacity : 1,000

Then for each channel which becomes blocked upon the overful queue a log message similar to the following is produced:

Code Block

MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1005 : Flow Control Enforced (Queue MyQueue)

When enough messages have been consumed from the queue that it becomes underfull, then the following log is generated:

Code Block

MESSAGE [vh(/test)/qu(MyQueue)] [vh(/test)/qu(MyQueue)] QUE-1004 : Underfull : Size : 600 bytes, Resume Capacity : 800

And for every channel which becomes unblocked you will see a message similar to:

Code Block

MESSAGE [con:2(guest@anonymous(713889609)/test)/ch:1] [con:2(guest@anonymous(713889609)/test)/ch:1] CHN-1006 : Flow Control Removed

Obviously the details of connection, virtual host, queue, size, capacity, etc would depend on the configuration in use.