Parallel Processing and OrderingIt is a common requirement to want to order message processing yet at the same time load balance processing in a SEDA style way across multiple threads, processes and machines. How to achieve parallel processingYou can send messages to a number of Camel Components to achieve parallel processing and load balancing such as
Issues of ordering with parallel processingAs soon as you send multiple messages to different threads or processes you will end up with an unknown ordering across the entire message stream as each thread is going So when procssing messages concurrently, you should consider ordering and concurrency issues. While this in itself is a large and diverse topic, here are some recommendations...
A good rule of thumb to help reduce concurrency problems is to make sure each single can be processed as an atomic unit in parallel (either without concurrency issues or using say, database locking); or if it can't, use a Message Group Using Message Groups with CamelTo use a Message Group with Camel you just need to add a header to the output JMS message based on some kind of Correlation Identifier to correlate messages which should be processed in order by a single thread - so that things which don't correlate together can be processed concurrently. For example the following code shows how to create a message group using an XPath expression taking an invoice's product code as the Correlation Identifier from("activemq:a").setHeader("JMSXGroupID", xpath("/invoice/productCode")).to("activemq:b"); You can of course use the Xml Configuration if you prefer |