camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tom Howe <tomh...@artcore.com>
Subject Help required for simple transactional Route for forwarding messages from ActiveMQ to TCP port
Date Wed, 16 Feb 2011 12:58:04 GMT
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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message