If InOnly works asynchronous then why does it wait for "direct:BBB" to finish
before the next step is executed? 
For example take the following code:

[code]
        from("jetty:http://localhost:8282/";)
                .log("Hello From A")
                .inOnly("direct:BBB")           // asynchronous?
                .log("Goodbye From A");
        
        from("direct:BBB")
                .log("Hello From B")
                .delay(5000)
                .log("Goodbye From B");
[/code]

If the [.inOnly("direct:BBB")] was asynchronous then the console should
print "GoodBye From A" before "Goodbye from B" because of the [.delay(5000)]
in route "direct:BBB". However what happens is that the console prints
"Hello From A", "Hello From B", (waits 5 seconds), "Good Bye From B",
"Goodbye From A". (screenshot1 attached).

However beside this there is the fact that the message is not being thrown
away even though I am using the "inOnly" exchange patter. Take the
following:

[code]
        from("jetty:http://localhost:8282/";)
                .transform(constant("AAA"))     // Change body of OUT Message.
                .inOnly("direct:BBB")           // Calling route direct:BBB 
using inOnly MEP.
                .log("I was waiting 'AAA' and got '${in.body}'");

        from("direct:BBB")
                .transform(constant("BBB"));    // Change body of OUT Message.
                        // But this should be "thrown away" as MEP is inOnly.
[/code]

The above code prints in the logs "I was waiting 'AAA' and got 'BBB'"
(screenshot2 attached). However based on "If it is an InOnly then if there's
a message at the end it is thrown away." shouldn't I have got "I was waiting
'AAA' and got 'AAA'"? Shouldn't the message at the end of route "direct:BBB"
have been thrown away?

Screenshot1: 
<http://camel.465427.n5.nabble.com/file/n5787994/screenshot1.png> 

Screenshot2:
<http://camel.465427.n5.nabble.com/file/n5787994/screenshot2.png> 


Ranx wrote
> InOnly is a fire-and-forget, asynchronous style of messaging.  InOut is a
> synchronous or pseudo-synchronous* request-reply messaging as Matt points
> out.
> 
> Part of the confusion is about the pattern set on the exchange to indicate
> whether the data flow is InOut or InOnly.  The other In/Out on the
> Exchange
> is about the data coming in and going out and is pretty much invariant in
> its existence and data structure.  Unfortunately even that's a bit
> misleading terminology as the data is always on the in except when an In
> data on the Exchange follows the route all the way "In" to the last
> endpoint and then if it is an InOut route the Out is what is returned. If
> it is an InOnly then if there's a message at the end it is thrown away.
> 
> InOut/InOnly are message flow patterns to set on the exchange. In/Out are
> the data elements associated with the exchange at any given moment in the
> route.
> 
> *When I say pseudo-synchronous it is because Jetty continuations do not
> hold the calling thread but make callbacks.  JMS InOut/request-reply
> actually set up two queues under the covers, one to send the request and
> one to send the reply. I'd have to check again on whether the calling
> thread waits or if a callback mechanism is deployed.  Obviously the latter
> is preferable in terms of threading and performance.
> 
> http://camel.apache.org/request-reply.html
> http://camel.apache.org/event-message.html
> 
> Brad





--
View this message in context: 
http://camel.465427.n5.nabble.com/Can-t-understand-what-inOnly-is-doing-tp5787961p5787994.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to