Hi The delay EIP is async by default. To make it block the thread use asyncDelayed=false https://camel.apache.org/components/latest/eips/delay-eip.html
On Wed, Mar 3, 2021 at 8:24 PM Lutor, Zoltan (Nokia - HU/Budapest) <[email protected]> wrote: > > Hi, > > I have a simple example code for playing with Scheduler component and to see > what is blocking-where during routing: > > import org.apache.camel.builder.RouteBuilder; > import org.apache.camel.component.scheduler.SchedulerComponent; > > /** > * A Camel Java DSL Router > */ > public class MyRouteBuilder extends RouteBuilder { > > /** > * Let's configure the Camel routing rules using Java code... > */ > public void configure() { > > // > http://camel.465427.n5.nabble.com/Camel-scheduler-is-not-concurrent-td5781066.html > // number of concurrent task a thread pool should have > SchedulerComponent comp = getContext().getComponent("scheduler", > SchedulerComponent.class); > comp.setConcurrentTasks(2); > > > from("scheduler://trigger?delay=2000&scheduler.concurrentTasks=2&repeatCount=3").routeId("scheduler") > .log("1") > .inOut("seda:route1") > .log("1.1"); > > from("seda:route1?concurrentConsumers=1").routeId("first route") > .log("2") > .delay(5000) > .log("2.1") > .inOut("seda:route2") > .log("2.2"); > > from("seda:route2").routeId("second route") > .log("3") > .delay(3000) > .log("3.1"); > } > } > > Expected behavior is > - scheduler fires an event > - event goes to route 1, thread got blocked > - scheduler fires again, event goes to route 1 then blocked to > - etc. > > Instead of that I get this output: > > > 19:59:49,895 [hread #0 - scheduler://trigger] scheduler > INFO 1 > 19:59:49,895 [hread #1 - scheduler://trigger] scheduler > INFO 1 > 19:59:49,942 [l-1) thread #2 - seda://route1] first route > INFO 2 > 19:59:49,945 [l-1) thread #2 - seda://route1] first route > INFO 2 > 19:59:54,946 [el (camel-1) thread #5 - Delay] first route > INFO 2.1 > 19:59:54,947 [el (camel-1) thread #6 - Delay] first route > INFO 2.1 > 19:59:54,948 [l-1) thread #3 - seda://route2] second route > INFO 3 > 19:59:54,950 [l-1) thread #3 - seda://route2] second route > INFO 3 > 19:59:57,950 [el (camel-1) thread #7 - Delay] second route > INFO 3.1 > 19:59:57,951 [el (camel-1) thread #5 - Delay] first route > INFO 2.2 > 19:59:57,951 [el (camel-1) thread #7 - Delay] second route > INFO 3.1 > 19:59:57,951 [hread #0 - scheduler://trigger] scheduler > INFO 1.1 > 19:59:57,952 [el (camel-1) thread #6 - Delay] first route > INFO 2.2 > 19:59:57,952 [hread #1 - scheduler://trigger] scheduler > INFO 1.1 > 19:59:59,954 [hread #0 - scheduler://trigger] scheduler > INFO 1 > 19:59:59,955 [l-1) thread #2 - seda://route1] first route > INFO 2 > 19:59:59,958 [hread #0 - scheduler://trigger] DefaultErrorHandler > ERROR Failed delivery for (MessageId: D72AAD6A473D1EB-0000000000000004 on > ExchangeId: D72AAD6A473D1EB-0000000000000004). Exhausted after delivery > attempt: 1 caught: org.apache.camel.ExchangeTimedOutException: The OUT > message was not received within: 30000 millis. > Exchange[D72AAD6A473D1EB-0000000000000004] > > Message History (complete message history is disabled) > --------------------------------------------------------------------------------------------------------------------------------------- > RouteId ProcessorId Processor > Elapsed (ms) > [scheduler ] [scheduler ] > [from[scheduler://trigger?delay=2000&repeatCount=3&scheduler.concurrentTasks=2]] > [ 4] > ... > [scheduler ] [to1 ] [seda:route1 > ] [ 0] > > Stacktrace > --------------------------------------------------------------------------------------------------------------------------------------- > > org.apache.camel.ExchangeTimedOutException: The OUT message was not received > within: 30000 millis. Exchange[D72AAD6A473D1EB-0000000000000004] > at > org.apache.camel.component.seda.SedaProducer.process(SedaProducer.java:129) > ~[camel-seda-3.8.0.jar:3.8.0] > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:169) > ~[camel-core-processor-3.8.0.jar:3.8.0] > at > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395) > [camel-core-processor-3.8.0.jar:3.8.0] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) > [camel-base-engine-3.8.0.jar:3.8.0] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60) > [camel-base-engine-3.8.0.jar:3.8.0] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:147) > [camel-core-processor-3.8.0.jar:3.8.0] > at > org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:312) > [camel-base-engine-3.8.0.jar:3.8.0] > at > org.apache.camel.component.scheduler.SchedulerConsumer.sendTimerExchange(SchedulerConsumer.java:58) > [camel-scheduler-3.8.0.jar:3.8.0] > at > org.apache.camel.component.scheduler.SchedulerConsumer.poll(SchedulerConsumer.java:43) > [camel-scheduler-3.8.0.jar:3.8.0] > at > org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:190) > [camel-support-3.8.0.jar:3.8.0] > at > org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:107) > [camel-support-3.8.0.jar:3.8.0] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?] > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) > [?:?] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > [?:?] > at java.lang.Thread.run(Thread.java:834) [?:?] > 19:59:59,988 [hread #0 - scheduler://trigger] SchedulerConsumer > WARN Error processing exchange. Exchange[D72AAD6A473D1EB-0000000000000004]. > Caused by: [org.apache.camel.ExchangeTimedOutException - The OUT message was > not received within: 30000 millis. Exchange[D72AAD6A473D1EB-0000000000000004]] > org.apache.camel.ExchangeTimedOutException: The OUT message was not received > within: 30000 millis. Exchange[D72AAD6A473D1EB-0000000000000004] > at > org.apache.camel.component.seda.SedaProducer.process(SedaProducer.java:129) > ~[camel-seda-3.8.0.jar:3.8.0] > at > org.apache.camel.processor.SendProcessor.process(SendProcessor.java:169) > ~[camel-core-processor-3.8.0.jar:3.8.0] > at > org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395) > ~[camel-core-processor-3.8.0.jar:3.8.0] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148) > [camel-base-engine-3.8.0.jar:3.8.0] > at > org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:60) > [camel-base-engine-3.8.0.jar:3.8.0] > at org.apache.camel.processor.Pipeline.process(Pipeline.java:147) > [camel-core-processor-3.8.0.jar:3.8.0] > at > org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:312) > [camel-base-engine-3.8.0.jar:3.8.0] > at > org.apache.camel.component.scheduler.SchedulerConsumer.sendTimerExchange(SchedulerConsumer.java:58) > [camel-scheduler-3.8.0.jar:3.8.0] > at > org.apache.camel.component.scheduler.SchedulerConsumer.poll(SchedulerConsumer.java:43) > [camel-scheduler-3.8.0.jar:3.8.0] > at > org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:190) > [camel-support-3.8.0.jar:3.8.0] > at > org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:107) > [camel-support-3.8.0.jar:3.8.0] > at > java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?] > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305) > [?:?] > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) > [?:?] > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) > [?:?] > at java.lang.Thread.run(Thread.java:834) [?:?] > 20:00:04,956 [el (camel-1) thread #5 - Delay] first route > INFO 2.1 > 20:00:04,957 [l-1) thread #3 - seda://route2] second route > INFO 3 > 20:00:07,959 [el (camel-1) thread #8 - Delay] second route > INFO 3.1 > 20:00:07,960 [el (camel-1) thread #5 - Delay] first route > INFO 2.2 > > > Beside events are not triggered and routed as expected - most probably due to > scheduler.concurrentTasks=2 in scheduler route definition (unintentional > leftover before reading > http://camel.465427.n5.nabble.com/Camel-scheduler-is-not-concurrent-td5781066.html) > - the exceptions buzzing around 30secs timeouts were really strange... > > What do you think? > > Br, > > Zoltan -- Claus Ibsen ----------------- http://davsclaus.com @davsclaus Camel in Action 2: https://www.manning.com/ibsen2
