In RoutingSlipCreator maybe add a slip like "jms:foo?exchangePattern=InOut,jms:bar?exchangePattern=InOut" instead of just the plain endpoint URIs.
On Tue, May 11, 2010 at 7:12 PM, Scott Parkerson <scott.parker...@gmail.com>wrote: > Camel riders, > > I've got a route that makes use of the Routing Slip EIP. Right now, a > processor is used to create the header to be used with the routingSlip > processor. Once that is done, the routingSlip then passes the messages > on to one or more ActiveMQ queues as targets. > > It was my understanding that the Routing Slip EIP is supposed to take > a message and send it to each destination synchronously (i.e. go to > destination "A", then destination "B", and so on until all of the > destinations in the routing slip header are visited, or an exception > occurs). However, during my experimentation, I've seen that the > routing slip processor seems to happily "fulfill" its duties by > sending to all of the destinations near simultaneously if the > destinations are ActiveMQ queues. > > Here's my RouteBuilder: > > /*..*/ > getContext().addInterceptStrategy(new Tracer()); > > from("activemq:results") > .unmarshal(bufFormatter) > .bean(RoutingSlipCreator.class) /* adds "activemq:foo, > etc. as needed" > .routingSlip("routingSlip"); > > from("activemq:foo") > .bean(Foo.class); > > from("activemq:bar") > .bean(Bar.class); > > from("activemq:baz") > .bean(Baz.class); > > from("activemq:quux") > .bean(Quux.class); > > And here's an example of the tracer tracing this interaction (I've > deleted the contents of the body for brevity): > > DefaultMessageListenerContainer-1 INFO > [org.apache.camel.processor.interceptor.Tracer] - > ID:xyzzy.ateb.com-52179-1273613387168-2:5:1:1:1 >>> (route1) --> > > com.ateb.dataproc.obc_processor.processor.postcontact.routingslipcrea...@407e75d2 > <<< Pattern:InOnly, Headers:{JMSPriority=4, JMSDeliveryMode=2, > JMSMessageID=ID:xyzzy.ateb.com-52179-1273613387168-2:5:1:1:1, > JMSCorrelationID=null, JMSRedelivered=false, > JMSTimestamp=1273613390576, JMSType=null, JMSReplyTo=null, > underTest=true, JMSDestination=queue://results, JMSXGroupID=null, > JMSExpiration=0}, BodyType:java.util.HashMap, Body:{ ... } > > DefaultMessageListenerContainer-1 INFO > [org.apache.camel.processor.interceptor.Tracer] - > ID:xyzzy.ateb.com-52179-1273613387168-2:5:1:1:1 >>> (route1) > > com.ateb.dataproc.obc_processor.processor.postcontact.routingslipcrea...@407e75d2 > --> routingSlip[routingSlip] <<< Pattern:InOnly, > Headers:{JMSDeliveryMode=2, > routingSlip=activemq:foo,activemq:bar,activemq:baz,activemq:quux, > JMSMessageID=ID:xyzzy.ateb.com-52179-1273613387168-2:5:1:1:1, > JMSDestination=queue://results, JMSRedelivered=false, underTest=true, > JMSPriority=4, JMSTimestamp=1273613390576, JMSCorrelationID=null, > JMSType=null, JMSReplyTo=null, JMSXGroupID=null, JMSExpiration=0}, > BodyType:java.util.HashMap, Body:{ ... } > > DefaultMessageListenerContainer-1 INFO > [org.apache.camel.processor.interceptor.Tracer] - > ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:2:1 >>> (route3) > from(activemq://bar) --> > com.ateb.dataproc.obc_processor.processor.postcontact....@1ee2433b <<< > Pattern:InOnly, Headers:{JMSCorrelationID=null, > CamelJmsDeliveryMode=2, underTest=true, JMSType=null, > JMSXGroupID=null, JMSTimestamp=1273613391428, JMSExpiration=0, > JMSDestination=queue://bar, JMSReplyTo=null, JMSRedelivered=false, > JMSMessageID=ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:2:1, > JMSPriority=4, JMSDeliveryMode=2, > routingSlip=activemq:baz,activemq:quux}, BodyType:java.util.HashMap, > Body:{ ... } > > DefaultMessageListenerContainer-1 INFO > [org.apache.camel.processor.interceptor.Tracer] - > ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:3:1 >>> (route4) > from(activemq://baz) --> > com.ateb.dataproc.obc_processor.processor.postcontact....@5809fdee <<< > Pattern:InOnly, Headers:{JMSTimestamp=1273613391434, JMSXGroupID=null, > CamelJmsDeliveryMode=2, > JMSMessageID=ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:3:1, > JMSPriority=4, routingSlip=activemq:quux, JMSDeliveryMode=2, > JMSExpiration=0, JMSReplyTo=null, JMSType=null, JMSRedelivered=false, > JMSDestination=queue://baz, JMSCorrelationID=null, underTest=true}, > BodyType:java.util.HashMap, Body:{ ... } > > DefaultMessageListenerContainer-1 INFO > [org.apache.camel.processor.interceptor.Tracer] - > ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:1:1 >>> (route2) > from(activemq://foo) --> > com.ateb.dataproc.obc_processor.processor.postcontact....@43ce663c <<< > Pattern:InOnly, Headers:{JMSXGroupID=null, JMSPriority=4, > JMSDeliveryMode=2, CamelJmsDeliveryMode=2, JMSTimestamp=1273613391410, > JMSExpiration=0, JMSType=null, JMSCorrelationID=null, underTest=true, > JMSReplyTo=null, JMSDestination=queue://foo, > routingSlip=activemq:bar,activemq:baz,activemq:quux, > JMSRedelivered=false, > JMSMessageID=ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:1:1}, > BodyType:java.util.HashMap, Body:{...} > > DefaultMessageListenerContainer-1 INFO > [org.apache.camel.processor.interceptor.Tracer] - > ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:4:1 >>> (route5) > from(activemq://quux) --> > com.ateb.dataproc.obc_processor.processor.postcontact.q...@34cef6f1 > <<< Pattern:InOnly, Headers:{underTest=true, > JMSMessageID=ID:xyzzy.ateb.com-52179-1273613387168-2:7:1:4:1, > CamelJmsDeliveryMode=2, routingSlip=, JMSTimestamp=1273613391450, > JMSDeliveryMode=2, JMSXGroupID=null, JMSExpiration=0, > JMSDestination=queue://quux, JMSRedelivered=false, JMSPriority=4, > JMSReplyTo=null, JMSType=null, JMSCorrelationID=null}, > BodyType:java.util.HashMap, Body:{ ...} > > So, what am I to do here? The reason I have these broken out into > separate queues is to be able to break up the transactions; some of > the processors require outside resources (Webservices, for example) > which may be down or problematic. I'd like to be able to deal with > that gracefully should any one of the processes fail without having to > repeat the pieces of the routing slip that have been successfully > dealt with. > > But more troubling to me is that the DSL makes it extremely easy to > write an "implementation" of the Routing Slip EIP which doesn't work > like a routing slip at all. > > Is there any way to fix my route so it works? Do I have to make all of > my exchanges InOut, perhaps? Help! > > Thanks, > Scott > -- Cheers, Jon Camel in Action: http://manning.com/ibsen Blog: http://janstey.blogspot.com