Hmm - ok I just realised that somewhere along the way I commented out the line:
<property name="redeliveryPolicy" ref="redeliveryPolicyDelivery"/> Now, I put it back it seems to be having the correct effect! Sorry for wasting your time. Tom On Wed, Feb 16, 2011 at 2:31 PM, Tom Howe <[email protected]> wrote: > That;s what I thought, hence my spring config : > > <bean id="redeliveryPolicyDelivery" class="org.apache.activemq. > RedeliveryPolicy"> > * <property name="maximumRedeliveries" value="100"/>* > <property name="useExponentialBackOff" value="true"/> > <property name="backOffMultiplier" value="10"/> > <property name="initialRedeliveryDelay" value="10000"/> > </bean> > > but it doesnt appear to have any effect. > > > > On Wed, Feb 16, 2011 at 2:19 PM, Claus Ibsen <[email protected]>wrote: > >> Hi >> >> Since you use ActiveMQ then when you use transacted, then you let >> ActiveMQ handle redelivery according to its redelivery policy >> settings. >> And those are 6 times and if still fail move message to the DLQ >> http://activemq.apache.org/redelivery-policy.html >> >> So that could explain why you see that behavior. You can configure AMQ >> to your needs in terms of redelivery. And where to move the message if >> exhausted. >> >> >> >> On Wed, Feb 16, 2011 at 1:58 PM, Tom Howe <[email protected]> wrote: >> > Hi, I'm new to Camel and I am trying to create a simple app that >> consumes >> > messages from an ActiveMQ queue and forwards them to a TCP port >> (splunk). If >> > the TCP connection is down I want the message left on the queue and >> retried >> > with expontential backoff. >> > >> > I've been trying to understand the TransactionClient page but I find >> that >> > whatever I try, if I raise an exception or I give it an invalid >> destination, >> > camel retries to send 5 times and then then gives up and removes the >> message >> > from the queue. >> > >> > I have a simple app that creates a SpringCamelContext as follows: >> > >> > ApplicationContext applicationContext = new >> > ClassPathXmlApplicationContext("appContext.xml"); >> > >> > SpringCamelContext context = new >> > SpringCamelContext(applicationContext); >> > >> > and adds a Route: >> > >> > context.addRoutes(new MyRoute()); >> > context.start(); >> > >> > >> > The route looks like this.. >> > >> > class MyRoute extends SpringRouteBuilder { >> > >> > @Override >> > public void configure() throws Exception { >> > // errorHandler(deadLetterChannel("activemq:error")); >> > >> > SpringTransactionPolicy required = lookup("PROPAGATION_REQUIRED", >> > SpringTransactionPolicy.class); >> > >> > errorHandler( >> > transactionErrorHandler(required) >> > .backOffMultiplier(5) >> > .maximumRedeliveries(100) >> > .useExponentialBackOff() >> > ); >> > >> > from("activemq-tom:queue:ispy?transacted=true") >> > .transacted("PROPAGATION_REQUIRED") >> > .policy(required) >> > .process(new Processor() { >> > >> > @Override >> > public void process(Exchange exchange) throws >> Exception >> > { >> > Message in = exchange.getIn(); >> > log.info("Message in: " + in); >> > throw new Exception("blah"); >> > } >> > }) >> > .to("mina:tcp://localhost:9999"); >> > } >> > } >> > >> > >> > My spring context contains: >> > >> > >> > <bean id="activemq-tom" >> > class="org.apache.activemq.camel.component.ActiveMQComponent"> >> > <property name="transacted" value="true"/> >> > <property name="configuration" ref="myConfigDelivery"/> >> > </bean> >> > >> > >> > <bean id="myConfigDelivery" >> > class="org.apache.camel.component.jms.JmsConfiguration"> >> > <property name="connectionFactory" >> > ref="jmsCachingConnectionFactoryDelivery"/> >> > <property name="transactionManager" >> > ref="jmsTransactionManagerDelivery"/> >> > <property name="concurrentConsumers" value="1"/> >> > <property name="maxConcurrentConsumers" value="1"/> >> > <property name="transacted" value="true"/> >> > </bean> >> > >> > <bean id="jmsTransactionManagerDelivery" >> > class="org.springframework.jms.connection.JmsTransactionManager"> >> > <property name="connectionFactory" >> > ref="jmsCachingConnectionFactoryDelivery"/> >> > </bean> >> > >> > >> > <bean id="jmsCachingConnectionFactoryDelivery" >> > class="org.springframework.jms.connection.SingleConnectionFactory"> >> > <property name="targetConnectionFactory" >> > ref="jmsConnectionFactoryDelivery"/> >> > </bean> >> > >> > <bean id="jmsConnectionFactoryDelivery" >> > class="org.apache.activemq.ActiveMQConnectionFactory"> >> > <property name="brokerURL" value="tcp://localhost:61616"/> >> > <!--<property name="redeliveryPolicy" >> > ref="redeliveryPolicyDelivery"/>--> >> > </bean> >> > >> > <bean id="redeliveryPolicyDelivery" >> > class="org.apache.activemq.RedeliveryPolicy"> >> > <property name="maximumRedeliveries" value="100"/> >> > <property name="useExponentialBackOff" value="true"/> >> > <property name="backOffMultiplier" value="10"/> >> > <property name="initialRedeliveryDelay" value="10000"/> >> > </bean> >> > >> > <!-- policy for required transaction used in our Camel routes --> >> > <bean id="PROPAGATION_REQUIRED" >> > class="org.apache.camel.spring.spi.SpringTransactionPolicy"> >> > <property name="transactionManager" >> > ref="jmsTransactionManagerDelivery"/> >> > <property name="propagationBehaviorName" >> > value="PROPAGATION_REQUIRED"/> >> > </bean> >> > >> > >> > I'm using the following dependencies: >> > >> > <dependency> >> > <groupId>org.springframework</groupId> >> > <artifactId>spring-core</artifactId> >> > <version>${org.springframework.version}</version> >> > <exclusions> >> > <exclusion> >> > <groupId>commons-logging</groupId> >> > <artifactId>commons-logging</artifactId> >> > </exclusion> >> > </exclusions> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.springframework</groupId> >> > <artifactId>spring-context</artifactId> >> > <version>${org.springframework.version}</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.springframework</groupId> >> > <artifactId>spring-context-support</artifactId> >> > <version>${org.springframework.version}</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.springframework</groupId> >> > <artifactId>spring-tx</artifactId> >> > <version>${org.springframework.version}</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>commons-lang</groupId> >> > <artifactId>commons-lang</artifactId> >> > <version>2.5</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.apache.camel</groupId> >> > <artifactId>camel-spring</artifactId> >> > <version>2.5.0</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.apache.camel</groupId> >> > <artifactId>camel-core</artifactId> >> > <version>2.5.0</version> >> > </dependency> >> > >> > >> > <dependency> >> > <groupId>org.apache.camel</groupId> >> > <artifactId>camel-jms</artifactId> >> > <version>2.5.0</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.apache.camel</groupId> >> > <artifactId>camel-http</artifactId> >> > <version>2.5.0</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.apache.camel</groupId> >> > <artifactId>camel-restlet</artifactId> >> > <version>2.5.0</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.apache.camel</groupId> >> > <artifactId>camel-mina</artifactId> >> > <version>2.5.0</version> >> > </dependency> >> > >> > >> > <dependency> >> > <groupId>org.apache.activemq</groupId> >> > <artifactId>activemq-core</artifactId> >> > <version>5.2.0</version> >> > </dependency> >> > >> > <dependency> >> > <groupId>org.apache.activemq</groupId> >> > <artifactId>activemq-camel</artifactId> >> > <version>5.2.0</version> >> > </dependency> >> > >> > >> > Any help appreciated. >> > >> > Many thanks, Tom >> > >> >> >> >> -- >> Claus Ibsen >> ----------------- >> FuseSource >> Email: [email protected] >> Web: http://fusesource.com >> Twitter: davsclaus >> Blog: http://davsclaus.blogspot.com/ >> Author of Camel in Action: http://www.manning.com/ibsen/ >> > >
