Hello Everybody!

I am relatively new to camel, so this might be a common mistake.
Also I am new to the mailing list, so please excuse me when I am doing 
something wrong here or if I am not sticking to the proper procedure.

I am trying to set up an application with several routes, inluding a 
scather-gather, and content-enricher.
A recepientList broadcasts a message to some query engines, they perform its 
task and send the result to the content enricher.
The content enricher needs to know from which engine the message is coming 
from, so he can properly enrich the message.
The content enricher will finally send the results to the aggregator.

To keep track where the message is coming from, I set the header in the 
query-engine-route by copying the value of the JMSDestination header.

I got the enricher working when I add it directly after the processor, but with 
an activemq:queue in between the exchange seems to loose the header I set 
earlier.
I can access the header in the query engine processor, but not anymore in the 
enricher processor.
I do only use exchange.getIn() in the processors, so this is not an exchange 
In/Out Problem like stated in the camel FAQs.
Also the header remains when I use constant() instead of getting the header 
dynamically with simple().

My route:
        // recipient list to broadcast the message
        
from("activemq:queue:recipientlist").recipientList(header("recipients"));

        //query engines (currently only one, but more to come):
        from("activemq:queue:engine1")
                .setHeader("queryEngine", 
simple("${in.header.JMSDestination}")) 
                .process(new queryProcessor())
                .to ("activemq:queue:enricher");

        //content enricher adds a certain Schema to the query Results, 
depending on the query engine the message is coming from
        from("activemq:queue:enricher")
                .process(new SchemaEnricher()) 
                .to("activemq:queue:aggregator");


I know the quick fix would be to write something like .setHeader("queryEngine", 
constant("queryEngine1")) , but this would mean more maintenance when adding 
new query engines.
So I really like to do it this way (or any other way where I can track from 
where the message is coming from).
Setting the header in the query-engine-processor would be an option too, but I 
kinda want it visible in the route.

Thanks for your help and best regards!

Philipp

Reply via email to