You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Charles Moulliard <ch...@gmail.com> on 2015/12/14 19:03:55 UTC
Idempotent don't filter within onexception
Hi,
I have created this Apache Camel Route to report an exception one time
(using the direct:notify endpoint) but the info is logged x times as the
maxredelivery policy defined on the JMS Client with ActiveMQ is equal to 2
<broker brokerName="demo" xmlns="http://activemq.apache.org/schema/core
">
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">">
<deadLetterStrategy>
<individualDeadLetterStrategy
queuePrefix="DLQ." useQueueForQueueMessages="true"/>
</deadLetterStrategy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<transportConnectors>
<transportConnector name="tcp" uri="tcp://localhost:61618"/>
</transportConnectors>
</broker>
<bean id="jmsTransactionManager"
class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
</bean>
<bean id="jmsConnectionFactory"
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61618"/>
<property name="redeliveryPolicy" ref="redeliveryPolicy"/>
</bean>
<amq:redeliveryPolicy id="redeliveryPolicy" maximumRedeliveries="2"
initialRedeliveryDelay="500"/>
<bean id="amq"
class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="connectionFactory" ref="jmsConnectionFactory"/>
<property name="transactionManager" ref="jmsTransactionManager"/>
<property name="transacted" value="true"/>
</bean>
<route>
<!-- Consume files from jms queue using a Spring Tx JMS Client
-->
<from uri="amq:{{queueInput}}"/>
<onException>
<exception>java.lang.IllegalArgumentException</exception>
<log message=">> Error took place. Message will bemoved to
DLQ"/>
<setHeader headerName="error-code">
<constant>111</constant>
</setHeader>
<setHeader headerName="error-message">
<simple>${exception.message}</simple>
</setHeader>
<idempotentConsumer messageIdRepositoryRef="memoryRepo">
<header>error-code</header>
<to uri="direct:notify"/>
</idempotentConsumer>
</onException>
<split>
<tokenize token="\n"/>
<to ref="csv2json"/>
<to uri="amq:{{queueOutput}}"/>
</split>
</route>
<route>
<from uri="direct:notify"/>
<!-- CALLED 3 TIMES -->
<log message=">> Error code : ${header.error-code}, Error
Message : ${header.error-message}"/>
</route>
Why the idempotentConsumer doesn't filter exception error-code ?
Regards,
--
Charles Moulliard
Apache Committer & PMC / Architect @RedHat
Twitter : @cmoulliard | Blog : http://cmoulliard.github.io