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
>

Reply via email to