Hi,

I encoutered some problem deploying a bridge between 2 jms brokers via
spring:

On one hand i have a public access jms broker (currently activemq 5.2.0)
accepting connections from many clients, each one working with a "name
standardized" set of queues.

On the other hand, i have a private jms broker (same activemq for easier
testing but will change soon) with only a common set of queues listened by
my asynchronous processor.

I want to use a camel route to concentrate every clients queues to the ones
of my private jms broker.
JMS Messages exchange works as follows:

In some cases, input messages doesn't expect reply (no replyTo set -> so
InOnly camel speaking)
In other cases, input messages expect a reply (replyTo set) but depending on
input message content and security configuration on processor, those one
could never reply to requester (i quess it falls into the InOptionalOut
scheme)

Here's my initial configuration:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
                xmlns:amq="http://activemq.apache.org/schema/core";
                xmlns:cml="http://activemq.apache.org/camel/schema/spring";
                xmlns="http://www.springframework.org/schema/beans";
                xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
                                                        
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.2.0.xsd
                                                        
http://activemq.apache.org/camel/schema/spring
http://activemq.apache.org/camel/schema/spring/camel-spring-1.5.0.xsd";>
                                                        
        <!-- - - - - - - - - - - - - - - - - - - - -->
        <!--      PUBLIC BROKER CONFIGURATION      -->
        <!-- - - - - - - - - - - - - - - - - - - - -->
        
        <!-- The public broker -->
        <bean id="public" class="org.apache.camel.component.jms.JmsComponent">
                <property name="configuration">
                        <bean 
class="org.apache.camel.component.jms.JmsConfiguration">
                                <property name="connectionFactory">
                                        <amq:connectionFactory 
brokerURL="failover:tcp://localhost:61616"
                                                                                
        userName="public"
                                                                                
        password="toto"/>
                                </property>
                        </bean>
                </property>
        </bean>
        
        <!-- The private broker -->
        <bean id="private" class="org.apache.camel.component.jms.JmsComponent">
                <property name="configuration">
                        <bean 
class="org.apache.camel.component.jms.JmsConfiguration">
                                <property name="connectionFactory">
                                        <amq:connectionFactory 
brokerURL="failover:tcp://localhost:61617"
                                                                                
        userName="private"
                                                                                
        password="titi"/>
                                </property>
                        </bean>
                </property>
        </bean>
        
        <!-- My routing configuration -->
        <cml:camelContext id="router">
                <cml:route>
                        <cml:from uri="public:*.queues.in.*"/>
                        <cml:to uri="private:private-queues.in.0"/>
                </cml:route>
        </cml:camelContext>
        
</beans>

My problem is that when replyTo is set, camel expect a reply on dynamically
created temp queue which may never came-back or very late (due to
asynchronous processing), so dead letter and time out often occurs. I tried
to add exchangePattern=InOptionalOut on queues without success.

So i disable camel replyTo (via the disableReplyTo property) and manually
handle it. Input message are so considered as InOnly and my processor
directly reply setting correlationID as input messageid.

However, routing override incomings messageId so i produce replies with
wrong correlation id as explainded here:

client push message in public broker
     -> public broker affect ID=1
          -> camel route it to private broker which override ID to 2
               -> so my processor listening private broker handle message
with ID=2 (producing correlation ID=2 against 1 desired)

I tried to set messageIdEnabled to false on private but it does works (i saw
activemq 5.2.0 uses camel 1.5.0 which had a bug on messageID copy solved in
later version so i have customized my active mq to use 1.6.0 but wihout
success)

Can someone help me to solve my problem ?

Thanks,
Nicolas

-- 
View this message in context: 
http://www.nabble.com/Routing-keeping-originalMessageId-tp22678749p22678749.html
Sent from the Camel - Users (activemq) mailing list archive at Nabble.com.

Reply via email to