[ 
https://issues.apache.org/jira/browse/AMQ-5730?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16468478#comment-16468478
 ] 

Tim Bain commented on AMQ-5730:
-------------------------------

The same behavior was described by another user on the mailing list: 
http://activemq.2283324.n4.nabble.com/Redelivery-schedule-is-messed-up-when-there-are-multiple-messages-on-the-queue-td4739313.html

A quick look at the code indicates that ActiveMQMessageConsumer.rollback() 
appears to increment redeliveryDelay (a consumer-wide member variable) each 
time any message is redelivered, rather than keying it to the number of 
redelivery attempts for the message in question. It might be possible to 
instead use the same approach used in ActiveMQSession.afterRollback(), where we 
compute the redelivery delay's exponent based on the number of redelivery 
attempts for the message itself.

> When nonBlockingRedelivery is set to true, redelivery delays can be incorrect
> -----------------------------------------------------------------------------
>
>                 Key: AMQ-5730
>                 URL: https://issues.apache.org/jira/browse/AMQ-5730
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>            Reporter: arnaud hoareau
>            Priority: Major
>         Attachments: ActiveMQRedelivery.java
>
>
> If nonBlockingRedivery is set to true and several message transactional 
> deliveries are rollbacked by the same message consumer, their redelivery 
> delay will interfer with each other. 
> Ex: 
> 1) A first message delivery is rollbacked. 
> 2) A second message is consumed by the same message consumer and delivery of 
> second message is also rollbacked.
> 3) First message is redelivered after initial delay and is rollbacked. 
> 4) Second message is delivered after initial delay and is rollbacked.
> 5) First message is redelivered after delay according to values of parameters 
> useExponentialBackOff, backOffMultiplier, maximumRedeliveryDelay and 
> useCollisionAvoidance.
> 6) Second message is redelivered after delay according to values of 
> parameters *but also according the value of the delay consumer of the 
> previous message*, stored in message consumer. For example, if last first 
> message redelivery delay was x (computed at step 5), the current delay of 
> step 6 will be at backoffmultiplier * x (if used).
> 7) Again, next first message redelivery delay will be impacted by last second 
> message redelivery delay, etc.
> A message redelivery should not impacted by other messages redelivery delay 
> and should only be computed by the number of redeliveries.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to