Can you put together a small stand-alone unit test that can reproduce this
and I can take a look?


On Thu, Sep 26, 2013 at 1:19 PM, eschor...@sendmail.com <
eschor...@sendmail.com> wrote:

> Hello,
>
> We are using a Camel/ActiveMQ/Spring configuration. We have setup a
> persistent queue backed by Kaha, and transactional configuration using
> org.springframwork.jms.connection.JmsTransactionManager.
>
> We are trying to get the exception/re-delivery working correctly, and find
> that while the maximumRedeliveries configuration is honored, the
> redeliveryDelay is not. Rather, redelivery is executed immediately when the
> exceptioning consumer is finished executing it's
> rollback/close/synchronization logic.
>
> Any input/experience would help...
>
> The most confusing thing here, is that there redelivery count is honored,
> and running the code in the debugger we see the redeliveryDelay is set, and
> calculated correctly. There is even a scheduled task set to redeliver the
> message. However, as the infrastructure (ActiveMQMessageConsumer) is
> iterating through it's synchronizations during the rollback processing, a
> call to ActiveMQMessageConsumer.synchronization.afterRollback() results in
> an immediate redelivery of the message.
>
>
> /Below is our actual configuration./
>
>
> Our JMS configuration:
>
>
>     <bean id="jms"
> class="org.apache.activemq.camel.component.ActiveMQComponent">
>         <property name="configuration">
>             <bean class="org.apache.camel.component.jms.JmsConfiguration">
>                 <property name="transacted" value="true"/>
>                 <property name="transactionManager"
> ref="jmsTransactionManager"/>
>                 <property name="errorHandlerLogStackTrace" value="false"/>
>
>
>                 <property name="concurrentConsumers"
> value="${jms.concurrentConsumers:10}" />
>                 <property name="connectionFactory"
> ref="jmsConnectionFactory"/>
>             </bean>
>         </property>
>     </bean>
>     <bean id="jmsConnectionFactory"
> class="org.apache.activemq.pool.PooledConnectionFactory"
> init-method="start"
> destroy-method="stop">
>         <property name="maxConnections" value="${jms.maxConnections:8}" />
>         <property name="connectionFactory">
>             <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>                 <property name="brokerURL"
> value="tcp://${jms.host:localhost}:${jms.port:8791}" />
>                 <property name="redeliveryPolicyMap"
> ref="jmsRedeliveryPolicyMap" />
>             </bean>
>         </property>
>         <property name="idleTimeout" value="0" />
>     </bean>
>     <amq:redeliveryPolicyMap id="jmsRedeliveryPolicyMap">
>         <amq:redeliveryPolicyEntries>
>             <bean class="org.apache.activemq.RedeliveryPolicy">
>                 <property name="queue" value="mailSender" />
>                 <property name="redeliveryDelay" value="#{ 1000 *
> ${mta.redeliveryDelay:300}}" />
>                 <property name="initialRedeliveryDelay" value="#{1000 *
> ${mta.redeliveryDelay:300}}" />
>                 <property name="maximumRedeliveryDelay" value="#{1000 *
> ${mta.redeliveryDelay:300}}" />
>                 <property name="maximumRedeliveries"
> value="${mta.maximumRedeliveries:3}" />
>             </bean>
>         </amq:redeliveryPolicyEntries>
>         <amq:defaultEntry>
>             <amq:redeliveryPolicy maximumRedeliveries="0" />
>         </amq:defaultEntry>
>     </amq:redeliveryPolicyMap>
>
> our camel/consumer configuration:
>        <camel:route id="mailSenderJMSConsumer">
>             <camel:from uri="jms:queue:mailSender" />
>             <camel:transacted/>
>
>
>             <camel:onException
> redeliveryPolicyRef="emailSendFailurePolicy">
>
>
> <camel:exception>com.sendmail.reac.email.RetryableEmailException</camel:exception>
>
>                 <camel:handled>
>                     <camel:constant>false</camel:constant>
>                 </camel:handled>
>                 <camel:log loggingLevel="WARN" message="${exception}"
> logName="com.sendmail.reac.camel"/>
>             </camel:onException>
>
>
>             <camel:onException
> redeliveryPolicyRef="emailSendFailurePolicy">
>                 <camel:exception>java.lang.Throwable</camel:exception>
>
>                 <camel:handled>
>                     <camel:constant>true</camel:constant>
>                 </camel:handled>
>                 <camel:log loggingLevel="ERROR" message="${exception}"
> logName="com.sendmail.reac.camel"/>
>             </camel:onException>
>
>
>            <camel:to
> uri="bean:mailSender?method=createMimeMessageFromEmlString(${out.body})" />
>            <camel:to uri="ref:emailEndpoint" />
>        </camel:route>
>
>
>
> thanks for any insight!
>
>
>
>
> --
> View this message in context:
> http://activemq.2283324.n4.nabble.com/ActiveMQ-Camel-RedeliveryDelay-configuration-is-not-used-immediate-redlivery-instead-tp4671869.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>



-- 
*Christian Posta*
http://www.christianposta.com/blog
twitter: @christianposta

Reply via email to