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

Timothy Bish updated AMQ-5319:
------------------------------

    Issue Type: New Feature  (was: Bug)

> Message Redelivery Does Not Work As Expected With Concurrent Connections
> ------------------------------------------------------------------------
>
>                 Key: AMQ-5319
>                 URL: https://issues.apache.org/jira/browse/AMQ-5319
>             Project: ActiveMQ
>          Issue Type: New Feature
>          Components: JMS client
>    Affects Versions: 5.9.0
>         Environment: All
>            Reporter: Ulrich Romahn
>            Priority: Minor
>              Labels: client, redelivery, redeliveryPolicy
>
> The redelivery of messages does not work as expected when a message daemon is 
> connected using multiple parallel connections.
> Consider the following scenario:
> 1. A message daemon is using Spring's 
> org.springframework.jms.listener.DefaultMessageListenerContainer and 
> configuring it with the following parameters:
>   a: cacheLevel = CACHE_NONE
>   b: concurrentConsumers = 5
>   c: maxConcurrentConsumers = 5
>   d: sessionTransacted = true
> 2. Furthermore, we are using the 
> org.apache.activemq.pool.PooledConnectionFactory with the following 
> configuration:
>   a: createConnectionOnStartup = true
>   b: maxConnections = 5
> We also setup a RedeliveryPolicy on the ConnectionFactory allowing messages 
> to get re-delivered to the listener in case of an error.
> Once the DefaultMessageListenerContainer gets initialized by the Spring 
> context, it will create 5 instances of a corresponding MessageListener 
> implementation each getting its own exclusive connection pre-created and 
> obtained from the ConnectionPool. Our message daemon is now connected to the 
> broker using five concurrent connections.
> If one of the MessageListener has an error during processing of a message and 
> throws an exception, the message gets put back onto the queue (on the client) 
> and scheduled for re-delivery according to the policy. However, the same 
> message is getting delivered to another listener using a different 
> connection. Since the thread running the redelivery scheduler is bound to a 
> connection, the second delivery is not delayed according to the redelivery 
> policy. A likely failure in that listener will get the message put back onto 
> the queue again and scheduled for re-delivery, but bound to that connection. 
> Now, that same message will get delivered to yet another message listener 
> without the defined delay. This will continue until the message got 
> redelivered by each connection and will then be redelivered using a delay 
> specified by the policy. In case the retry count is less than the number of 
> connections, the message will get send to the DLQ.
> I observe the same behavior when using broker-side redelivery using the 
> RedeliveryPlugin since there the delay is also bound to a connection.
> However, the re-delivery delay should be globally per message, regardless  of 
> session or connection. Although this is not a standardized feature, the 
> current implementation is severely limited as described above which caused me 
> to define this a bug.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to