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

Jon Harper commented on AMQ-5730:
---------------------------------

This is a problem because with this, if exponential backoff is used and for 
some reason all jms transactions are rolled back for a few seconds, all the 
messages are redelivered but after 10-20 messages your are pretty much 
guaranteed to have a very long delay because of the exponential (the only limit 
is maximumRedeliveryDelay).

So this means very high delays can be reached in a very short time (in contrast 
to the normal mode where it takes a long time to get to a long delay).
 The messages are scheduled on this consumer in a very long time and the only 
way to process them again is to stop the consumer so that another consumer can 
process them.

Fixing this is important because the only workaround is to have a very low 
maxRedeliveryDelay which defeats the purpose of using exponential backoff.

> 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
>    Affects Versions: 5.15.3
>            Reporter: arnaud hoareau
>            Assignee: Jean-Baptiste Onofré
>            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