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

Reply via email to