[ 
https://issues.apache.org/jira/browse/QPID-2935?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ken Giusti updated QPID-2935:
-----------------------------

    Attachment: QPID-2935.tgz

A very hacky proof-of-concept of the "delayed completion" approach.   Includes 
same sender and receiver clients (including a spout derivation).  Loosely based 
on the IncompleteMessageList object in the broker's SessionState object.

Associates a list of overflow messages and a timer thread with the broker's 
SessionState for a (producer) client.  Should a message fail to enqueue to a 
queue due to limit overflow, this hack stores the message on the overflow list. 
 All further messages that arrive from that client are also queued to the 
overflow list (preserving order).   Periodically, the timer thread attempts to 
route the message at the head of the overflow list.  Should the routing succeed 
(there was room on the destination queues), the head message is removed from 
the list, and the next message is routed.

I've modified the client side to wait for capacity to become available when it 
is exhausted.   

When run against the example slow consumer (receiver.cpp), the sender client 
will occasionally block in the send() api call, until space becomes available 
on the queue.

 

> Support "best effort" producer flow control within the AMQP 0.10 
> implementation.
> --------------------------------------------------------------------------------
>
>                 Key: QPID-2935
>                 URL: https://issues.apache.org/jira/browse/QPID-2935
>             Project: Qpid
>          Issue Type: New Feature
>          Components: C++ Broker, C++ Client
>    Affects Versions: 0.9
>         Environment: any
>            Reporter: Ken Giusti
>            Assignee: Ken Giusti
>             Fix For: Future
>
>         Attachments: QPID-2935.tgz
>
>
> To what extent, if any, could producer flow control be supported on the 
> existing (pre-1.0) protocol?
> In the current C++ broker/client implementation, when a queue on the broker 
> fills to the point where it cannot accept any more messages 
> (--default-queue-limit hit), the broker will forcibly disconnect any client 
> that attempts to route a message to that queue.   This is an abrupt failure - 
> the producing client is not privy to the queue's remaining capacity.  The 
> broker provides no feedback to the producing client, which could be used to 
> throttle the client's message production rate.
> The purpose of this JIRA is to explore the possible methods for implementing 
> producer throttling on the current 0.10 C++ codebase. 

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:dev-subscr...@qpid.apache.org

Reply via email to