The advanced flow-control extension (AFCE) to web services reliable messaging protocol (WSRM) attempts to minimize the number of dropped messages by synchronizing the rate at which the reliable messaging source (RMS) sends messages with the rate at which the reliable messaging destination (RMD) can receive them. This minimization is achieved via the introduction of the BufferRemaining element in the WSRM protocol's SequenceAcknowledgement header block. This element is used to inform the RMS of the number of messages that the RMD is capable of receiving before messages start being dropped.
The RMS uses the BufferRemaining element's value to adjust the rate at which messages are sent. The RMS will not send new messages if the BufferRemaining element's value in a SequenceAcknowledgement header block is 0.
While the BufferRemaining element value is reported as 0, the RMS will periodically request for acknowledgements from the RMD until one is received containing a BufferRemaining element value greater than 0.
The example in the following figure shows an already-established reliable sequence between an RMS and an RMD. The RMS sends 2 messages (message 1 and 3), after which it is informed via the SequenceAcknowledgement header block (message 4) that the RMD can no longer receive any new messages (BufferRemaining is 0). Sometime later, the RMD informs the RMS that it can once again receive messages by changing the BufferRemaining value to 1 in a SequenceAcknowledgement header block (message 5). The RMS then proceeds to send the third message (message 6).
Figure 1: Example message flow diagram between an RMS and an RMD with AFCE to WSRM