See the seda option waitForTaskToComplete

On Tue, Sep 27, 2016 at 5:37 PM, sim085 <sim...@hotmail.com> wrote:
> This is getting confusing :(
>
> The docs for SEDA seem to say this should always be async.
> Link: http://camel.apache.org/seda.html
>
> They provide the following sample
>
> [code]
> public void configure() throws Exception {
>     from("direct:start")
>         // send it to the seda queue that is async     <<<<<
>         .to("seda:next")
>         // return a constant response
>         .transform(constant("OK"));
>
>     from("seda:next").to("mock:result");
> }
>
> Object out = template.requestBody("direct:start", "Hello World");
> assertEquals("OK", out);
> [/code]
>
> However when I add some logs to it I get a pretty synchronous result.
>
> [code]
> import org.apache.camel.ExchangePattern;
> import org.apache.camel.Produce;
> import org.apache.camel.ProducerTemplate;
> import org.apache.camel.builder.RouteBuilder;
> import org.apache.camel.test.junit4.CamelTestSupport;
> import org.junit.Test;
>
> public class AsynchTest extends CamelTestSupport {
>         protected RouteBuilder createRouteBuilder() throws Exception {
>                 return new RouteBuilder() {
>
>                         @Override
>                         public void configure() {
>
>                                 from("direct:start")
>                                         .log("AAA: The Body Before SEDA Call 
> is ${in.body}")    // Hello World
>                                 // send it to the seda queue that is async
>                                 .to("seda:next")
>                                 // return a constant response
>                                 .log("AAA: Return from BBB!")
>                                 .transform(constant("OK"));
>
>                             from("seda:next")
>                                 .log("BBB: Going to wait for five seconds!")
>                                 .delay(5000)
>                                 .to("mock:result")
>                                 .log("BBB: I am ready!");
>
>                         }
>                 };
>         }
>
>         @Test
>         public void requestReply() {
>
>                 Object out = super.template.requestBody("direct:start", 
> "Hello World");
>                 assertEquals("OK", out);
>         }
> }
> [/code]
>
> [output]
> [                          main] route1                         INFO  AAA:
> The Body Before SEDA Call is Hello World
> [mel-1) thread #0 - seda://next] route2                         INFO  BBB:
> Going to wait for five seconds!
> [mel-1) thread #0 - seda://next] route2                         INFO  BBB: I
> am ready!
> [                          main] route1                         INFO  AAA:
> Return from BBB!
> [/output]
>
> If I set the ExchangePattern to InOnly then it works async.
>
> [output]
> [                          main] route1                         INFO  AAA:
> The Body Before SEDA Call is Hello World
> [                          main] route1                         INFO  AAA:
> Return from BBB!
> ...
> [mel-1) thread #0 - seda://next] route2                         INFO  BBB:
> Going to wait for five seconds!
> ...
> [mel-1) thread #0 - seda://next] route2                         INFO  BBB: I
> am ready!
> [/output]
>
>
>
> sim085 wrote
>> I have changed the code a little and ran the test again. From what I can
>> see the SEDA endpoint acts correctly to the InOut and InOnly
>> ExchangePattern, i.e. - acts asynchronously when called with InOnly and
>> synchronously when called with InOut.
>
>
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Can-t-understand-what-inOnly-is-doing-tp5787961p5788123.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
http://davsclaus.com @davsclaus
Camel in Action 2: https://www.manning.com/ibsen2

Reply via email to