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.