You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by "Leber, Thomas" <th...@omnetric.com> on 2017/03/02 11:48:11 UTC
Routing Slip + InOutPattern + Transaction does not work
Hi,
I'm trying to use a Routing Slip with the InOut pattern. Also I have the requirement to transact the whole system. I have set up a small example but I won't run.
The message stays inside the "producer" queue and will not be Picked up by the "_route1" or "_route2".
When I'm commenting the line "<property name="transacted" value="true" />" from the ActiveMq Component, it works fine, but then nothing is transacted.
Also the line: <setExchangePattern id="_setExchangePattern1" pattern="InOnly" /> does not reset the JMSReply to header, so every other following queue will try to send a reply to this temp queue.
Any ideas how to solve
a. that I can user Transaction, InOut Pattern and a routing slip.
b. that the JMSReply header is reset. I know I can use removeHeaders, but it looks a bit as a bug for me...
Best,
Thomas
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:amq="http://activemq.org/config/1.0" xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<!-- Active MQ General Properties -->
<bean id="policy" class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="-1" />
</bean>
<!-- Active MQ Properties Z-SM -->
<bean id="jmsTransactionManager" class="org.springframework.jms.connection.JmsTransactionManager">
<property name="connectionFactory" ref="activemq-factory" />
</bean>
<bean id="required" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
<property name="transactionManager" ref="jmsTransactionManager" />
<property name="propagationBehaviorName" value="PROPAGATION_REQUIRED" />
</bean>
<bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="activemq">
<property name="connectionFactory" ref="activemq-factory" />
<property name="transacted" value="true" />
</bean>
<bean class="org.apache.activemq.ActiveMQConnectionFactory" id="activemq-factory">
<property name="brokerURL" value="tcp://localhost:61617" />
<property name="userName" value="admin" />
<property name="password" value="admin" />
</bean>
<!-- Property configuration -->
<cm:property-placeholder id="placeholder" persistent-id="routeconfig-routeslipconfig" update-strategy="reload">
<cm:default-properties>
<cm:property name="routing.slip" value="activemq:queue:ExcutionProcessA,activemq:queue:ExcutionProcessB" />
</cm:default-properties>
</cm:property-placeholder>
<camelContext id="routingSlipContext" xmlns="http://camel.apache.org/schema/blueprint">
<propertyPlaceholder id="properties" location="blueprint:placeholder" />
<route id="producer">
<from id="_from1" uri="timer:mytimer?delay=2000" />
<transacted ref="required" />
<to uri="activemq:queue:producer" />
</route>
<route id="routingSlip">
<from uri="activemq:queue:producer" />
<setBody id="_setBody1">
<simple>asdf</simple>
</setBody>
<setHeader headerName="queue1">
<simple>ExcutionProcessA</simple>
</setHeader>
<setHeader headerName="queue2">
<simple>ExcutionProcessB</simple>
</setHeader>
<setExchangePattern id="_setExchangePattern1" pattern="InOut" />
<routingSlip id="_routingSlip1">
<simple>activemq:queue:${header.queue1},activemq:queue:${header.queue2}</simple>
</routingSlip>
<setBody id="_setBody5">
<simple>${body} -> main route</simple>
</setBody>
<setExchangePattern id="_setExchangePattern1" pattern="InOnly" />
<log id="_log1" message="${body}" />
<log id="_log2" message="$simple{headers}" />
<to id="_to1" uri="activemq:queue:output" />
</route>
<route id="mocker">
<from uri="activemq:queue:output" />
<to uri="mock:done" />
</route>
<route id="_route1">
<from id="_from2" uri="activemq:queue:ExcutionProcessA" />
<setBody id="_setBody2">
<simple>${body} -> route 1</simple>
</setBody>
<log id="_log3" message="consumer 2" />
<setHeader headerName="route1" id="_setHeader1">
<simple>yeah!</simple>
</setHeader>
</route>
<route id="_route2">
<from id="_from3" uri="activemq:queue:ExcutionProcessA" />
<setBody id="_setBody3">
<simple>${body} -> route 1</simple>
</setBody>
<log id="_log4" message="consumer 1" />
<setHeader headerName="route1" id="_setHeader2">
<simple>yeah!</simple>
</setHeader>
</route>
<route id="_route3">
<from id="_from4" uri="activemq:queue:ExcutionProcessB" />
<setBody id="_setBody4">
<simple>${body} -> route 2</simple>
</setBody>
<setHeader headerName="route2" id="_setHeader3">
<simple>yeah!</simple>
</setHeader>
</route>
</camelContext>
</blueprint>