[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-dev
Subject:    [jira] Created: (AMQ-2336) Redeliveried messages stops consumers
From:       "Diego Rodriguez (JIRA)" <jira () apache ! org>
Date:       2009-07-31 11:27:33
Message-ID: 1582646174.1249039653790.JavaMail.jira () brutus
[Download RAW message or body]

Redeliveried messages stops consumers from going on consuming the rest of messages in \
                the queue
-----------------------------------------------------------------------------------------------


                 Key: AMQ-2336
                 URL: https://issues.apache.org/activemq/browse/AMQ-2336
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.2.0, 5.3.0
         Environment: Windows XP, Java  1.5.0_11
Spring 2.5.6 DefaultMessageListenerContainer
            Reporter: Diego Rodriguez


Here are the steps to reproduce de problem:

   - redeliveryPolicy configured in ActiveMQConnectionFactory as \
initialRedeliveryDelay 10000, maximumRedeliveries 6, useExponentialBackOff true, \
backOffMultiplier 3. With these settings, messages, in case of error, stays in the \
                queue several minutes.
   - DefaultMessageListenerContainer with concurrentConsumers, maxConcurrentConsumers \
                set to 1, sessionTransacted=true, and cacheLevel CACHE_CONSUMER
   - We introduce a "bad" message in a queue (configured to cause a RuntimeException \
in the MDP associated with the queue). The message waits in the queue to be \
                redelivered again (seen in jconsole)
   - We introduce a "good" message in a queue. The MDP associated with the queue \
should process this message inmediatly with no exception, but instead, the message is \
not been processed until last redelivery of the "bad" message, and it happens several \
minutes later. When this happens, message is processed Ok.

   This problem can cause queues to grow unnecessarily if few messages are waiting to \
be redelivered. What I expected to happen is messages being processed as they arrive \
if  there is a consumer available, but it seems consumers with a rollback in a \
transaction are not available until the rollbacked  message is processed again and \
finally sent to DLQ.

   In addition, in Activemq version 5.2.0, when I remove consumers while waiting for \
next redelivery of the message, broker throws this exception (this not happens with \
5.3-SNAPSHOT):

  30 jul 2009 14:17:45,140 ERROR [ActiveMQ Transport: tcp:///127.0.0.1:3656] \
                org.apache.activemq.broker.TransportConnection.Service  - sync error \
                occurred:
javax.jms.JMSException: Transaction 'TX:ID:mymachine-4579-1248953104078-0:5207:52' \
                has not been started.
javax.jms.JMSException: Transaction 'TX:ID:mymachine-4579-1248953104078-0:5207:52' \
                has not been started.
       at org.apache.activemq.broker.TransactionBroker.getTransaction(TransactionBroker.java:270)
                
       at org.apache.activemq.broker.TransactionBroker.acknowledge(TransactionBroker.java:190)
                
       at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
       at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
       at org.apache.activemq.broker.BrokerFilter.acknowledge(BrokerFilter.java:74)
       at org.apache.activemq.broker.MutableBrokerFilter.acknowledge(MutableBrokerFilter.java:85)
                
       at org.apache.activemq.broker.TransportConnection.processMessageAck(TransportConnection.java:456)
                
       at org.apache.activemq.command.MessageAck.visit(MessageAck.java:205)
       at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:305)
                
       at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:179)
                
       at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:68)
                
       at org.apache.activemq.transport.WireFormatNegotiator.onCommand(WireFormatNegotiator.java:143)
                
       at org.apache.activemq.transport.InactivityMonitor.onCommand(InactivityMonitor.java:206)
                
       at org.apache.activemq.transport.TransportSupport.doConsume(TransportSupport.java:84)
                
       at org.apache.activemq.transport.tcp.TcpTransport.doRun(TcpTransport.java:203)
       at org.apache.activemq.transport.tcp.TcpTransport.run(TcpTransport.java:185)
       at java.lang.Thread.run(Thread.java:595

   

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic