On Tue, May 11, 2010 at 7:21 PM, Jon Anstey <jans...@gmail.com> wrote: > In RoutingSlipCreator maybe add a slip like > "jms:foo?exchangePattern=InOut,jms:bar?exchangePattern=InOut" instead of > just the plain endpoint URIs.
I tried setting my routingSlips to look like this: activemq:foo?exchangePattern=InOut and the odd thing is that the tracer doesn't show any difference on the consuming side; i.e. the MEP is still InOnly, and things are still handled out of order. Any other ideas? --sgp > 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 >