It might be worth asking the Spring folks what
DefaultMessageListenerContainer does in terms of transactions &
acknowledgements as I've no idea. I think I saw some post on the
spring forum that things don't work correctly with that container and
you have to use the SimpleMessageContainer or something.

On 9/15/06, kaipa <[EMAIL PROTECTED]> wrote:

Hi all,

We are implementing a fail-over scenario for message processing in the
queue. We may have one to many message producers and one to many phisically
separated servers that consume messages from the queue. It is possible that
one consuming server fails for some reason and we need to redeliver message
to the different server in this case. Here is the sequence we want to
implement:

1. Message is posted to the queue
2. Message is consumed by server1
3. Server1 one fails to process the message for some reason.
4. Message is re-delivered to server2.

Note, server1 does not brake the connection, it just can't process one
particular message.

We use AMQ 4.0.1 with Spring 2.0 and consume message with Spring listener.
Here is the typical configuration:

  <bean id="connectionFactory"
      class="org.apache.activemq.ActiveMQConnectionFactory">
     <property name="brokerURL" value="tcp://qservice:61616" />
     <property name="redeliveryPolicy">
          <bean class="org.apache.activemq.RedeliveryPolicy">
                                <property name = "initialRedeliveryDelay" 
value="60000"/>
                                <property name = "backOffMultiplier" value="2"/>
                                <property name = "useExponentialBackOff" 
value="true"/>
                                <property name = "maximumRedeliveries" 
value="3"/>
                  </bean>
     </property>
   </bean>

    <bean id="listenerContainer"

class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="concurrentConsumers" value="1" />
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="destination" />
        <property name="messageListener" ref="messageListener" />
    </bean>

MessageListener throws an exception in onMessage() if it can't process the
message. However, we can not make re-delivery to work. It is not being
re-delivered yet to the same server!

Could you help us to understand:
1. What is wrong in our case?
2. How to implement re-delivery as desired.
3. I've tried some tests, and re-delivery works if transactional session is
used and rollback() called. But how to make it working with message
listeners?

Thank you in advance.
--
View this message in context: 
http://www.nabble.com/Redelivery-of-failed-messages-tf2276524.html#a6322201
Sent from the ActiveMQ - User forum at Nabble.com.




--

James
-------
http://radio.weblogs.com/0112098/

Reply via email to