The only way to have reliable delivery without duplicates is to use an
exactly-once QoS based on the AMQP 1.0 3-ack handshake.  I don't believe
this is currently implemented in the broker (or the client).

This involves de-duplication built into the client.  The 3-ack
significantly reduces the number of message-IDs that needs to be stored
for de-duplication.

I do believe that this capability will be appearing soon in the Proton
API work that Gordon Sim is doing in a branch currently.

-Ted

On 10/29/2014 09:38 AM, Nitin Shah wrote:
> Hi Ted, Dev team
> 
> Thanks for the response.
> 
> We expect it to be a reliable connection and I have tried the capacity values 
> set to minimum, but then we still get a single message replay. 
> I think the penalty of performance on synchronous messages would be 
> unacceptable. 
> 
> Even if we look at the redelivered flag, we may have to keep a buffer of last 
> set of messages to determine if we have received the messages before, unless 
> I misunderstand the definition of that flag. Does this flag guarantee that 
> the message has been delivered to the client before?
> 
> Nitin
> 
> -----Original Message-----
> From: Ted Ross [mailto:tr...@redhat.com] 
> Sent: Tuesday, October 28, 2014 12:37 PM
> To: Nitin Shah; dev@qpid.apache.org
> Subject: Re: Question On QPID behavior
> 
> Nitin,
> 
> What are your reliability requirements?  Is your application 
> bandwidth-sensitive?
> 
> You are dealing with tradeoffs in reliability, message duplication, and 
> performance.  I assume since you are using at-least-once that you don't want 
> to lose messages.  In that case, you will have to tolerate some amount of 
> duplication if there is a connection or broker failure.  You can reduce the 
> extent of duplication by using a smaller sender capacity or by using 
> sender.send(message, sync=true), but this will reduce your throughput.
> 
> Are you concerned about duplication because of wasted network bandwidth or 
> because your consumer application doesn't handle them efficiently?
> You can use the 'redelivered' flag on received messages to determine if 
> de-duplication is needed (i.e. if you were to add a de-dup layer).
> 
> -Ted
> 
> On 10/27/2014 05:28 PM, Nitin Shah wrote:
>> Hi Ted ,
>>
>> Thanks for your prompt response.
>>
>> I would further like to explore how we can avoid receiving the same messages 
>> when the broker restarts keeping in mind that the messages have been 
>> acknowledged by the receiving entity in the first place. We would like to 
>> avoid getting these messages. We are using the reliable connection option ( 
>> at least once ). 
>>
>> Thanks
>> Nitin Shah
>>
>> -----Original Message-----
>> From: Ted Ross [mailto:tr...@redhat.com]
>> Sent: Monday, October 27, 2014 4:26 PM
>> To: dev@qpid.apache.org
>> Subject: Re: Question On QPID behavior
>>
>> Nitin,
>>
>> One thing to keep in mind is that there are actually two separate transfers 
>> involved in moving a message from sender to receiver.  You mentioned the 
>> sender's capacity is 10, which is interesting since it is very close to the 
>> number of re-sends you are seeing.
>>
>> The transfer from sender to broker-queue is one acknowledged transfer 
>> and the transfer from the queue to the receiver is the other.  The
>> session.acknowledge() is only concerned with the second transfer (queue to 
>> receiver).
>>
>> It is likely that the re-sends are coming from the sender and not the queue 
>> (i.e. 10 duplicate messages are re-sent and re-queued).  If this is the 
>> case, the way you use session.acknowledge() will have no effect on the 
>> behavior.
>>
>> Generally, you will see re-sent messages when connections or brokers are 
>> shut down and restarted.  This is because there are a number of in-doubt 
>> deliveries after the connection loss.  The number of in-doubt deliveries is 
>> capped by the capacity of both the sender and receiver.  Note also that the 
>> messages that are re-sent are annotated as such with the redelivered header 
>> flag.
>>
>> In your case, you can have up to 10 in-doubt deliveries from the sender and 
>> one in-doubt from the queue (since you acknowledge every message).
>>
>> -Ted
>>
>>
>> On 10/27/2014 03:57 PM, Nitin Shah wrote:
>>> Hi,
>>>
>>> We are running  C++ QPID broker and clients on version 0.26 . running on 
>>> WindRiver Linux.
>>> We acknowledge the session received messages on the client using  
>>> session.acknowledge() interface on every received message. However, when 
>>> the broker is restarted ( after it being stopped ), we get the last 11 
>>> messages repeated to the client. The senders capacity is set to 10.
>>>
>>> We would like to understand how the acknowledge works. It does not seem to 
>>> matter if we use the other forms of acknowledges i.e.
>>> session.acknowledge(message &) or session.acknowledgeUpTo(message &). The 
>>> behavior is the same although the documentation seems to indicate that once 
>>> acked to the broker, the messages should not be repeated.
>>>
>>> Can I ask for some feedback and clarify this.
>>>
>>> Thanks
>>>
>>> Nitin Shah
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional 
>> commands, e-mail: dev-h...@qpid.apache.org
>>
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
> For additional commands, e-mail: dev-h...@qpid.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to