Not for messages that were in the andes client consumer buffer without
being actually consumed by the application.

On Thu, Mar 2, 2017 at 7:20 AM, Asanka Abeyweera <asank...@wso2.com> wrote:

> AFAIK we need to set the redelivered flag. I remember reading it in a spec
> or something.
>
> Sent from my mobile
>
> --
> Asanka Abeyweera
> Software Engineer
> WSO2 Inc.
>
> Phone: +94 71 222 8648
>
> On Mar 2, 2017 7:04 AM, "Hasitha Hiranya" <hasit...@wso2.com> wrote:
>
>> Hi Pamod and all,
>>
>> IMO, *we need both side's changes.*
>>
>> Andes client - when receover() is called, send reject to application
>> consumed messages, and clear internal buffer
>> Server - while recovering, do not increase redelivery count (do not
>> consider as a redelivery, as app has not consumed). Redelivery header flag
>> is not needed as well.
>>
>> Let us investigate and implement
>>
>> Thanks
>>
>>
>> On Wed, Mar 1, 2017 at 4:11 PM, Pamod Sylvester <pa...@wso2.com> wrote:
>>
>>> Hi All,
>>>
>>> Based on the issue mentioned in the $subject and described in [1] .
>>> Here's what we discussed,
>>>
>>> *Issue Summary*
>>>
>>> During an error, when recover() session is called by the consumer (i.e
>>> jms client/ESB), all unacked messages gets re-tried. This includes the
>>> messages which were received by the JMS consumer as well as the messages
>>> which were buffered in the client.
>>>
>>> As a result, the messages which were buffered in the client and which
>>> have not being received by the consumer get's diverted to the DLC after the
>>> retry count has being breached.
>>>
>>> *Problem Description*
>>>
>>> The could also be described as a gap between the AMQP and the JMS
>>> specifications. According to the AMQP the messages should be sent to the
>>> client as a batch. Though JMS provides a way to acknowledge messages
>>> individually. It doesn't provide a way to rollback an individual message.
>>>
>>> The only option is to recover the whole session, when the client choses
>>> to recover() the corresponding channel id of the client is sent to the
>>> broker, for it to recover all unacknowledged messages. When the server
>>> recovers unacked messages it will include the messages which were received
>>> by the JMS client as well messages which are buffered in the client and
>>> which were not received.
>>>
>>> *Proposed Solution*
>>>
>>> One way of solving this is through the following steps,
>>>
>>> *Andes client side changes *
>>>
>>>  1. When recover() is called from the client, distinguish the difference
>>> between the received messages and the messages which are buffered. We've
>>> done something similar for the rollback operation.
>>>  2. The messages which were received by the JMS client, could be
>>> explicitly rejected(). Sending a null ack for the message to the server.
>>> Since this messages need to be retried for the given number of times.
>>>  3. Once the rejection is sent the server will re-schedule the message
>>> until the max retry count is reached in the
>>>
>>> *server side changes*
>>>
>>> When session recover is called in the broker,
>>>
>>> *AndesSubscription.recoverMessages()*
>>>
>>> We could maintain a seperate flag for each *DeliverableAndesMetadata 
>>> *object.
>>> So that when it's being re-scheduled for delivery, in the 
>>> *MaximumNumOfDeliveryRule.evaluate()
>>> *would filter out these messages and will not increase the 
>>> *maximumRedeliveryTimes
>>> *for the message.
>>>
>>> The above is one way we could solve the problem. Would there be any
>>> implications to it ? or will there be a better way of solving this?  wdyt ?
>>>
>>> [1] https://wso2.org/jira/browse/MB-1887
>>>
>>> Thanks,
>>> Pamod
>>>
>>> --
>>> *Pamod Sylvester *
>>>
>>> *WSO2 Inc.; http://wso2.com <http://wso2.com>*
>>> cell: +94 77 7779495 <+94%2077%20777%209495>
>>>
>>
>>
>>
>> --
>> *Hasitha Abeykoon*
>> Senior Software Engineer; WSO2, Inc.; http://wso2.com
>> *cell:* *+94 719363063*
>> *blog: **abeykoon.blogspot.com* <http://abeykoon.blogspot.com>
>>
>>


-- 
*Hasitha Abeykoon*
Senior Software Engineer; WSO2, Inc.; http://wso2.com
*cell:* *+94 719363063*
*blog: **abeykoon.blogspot.com* <http://abeykoon.blogspot.com>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to