Search code examples
apache-camelshutdown

Apache Camel shuts down right after start, no reason logged, no exception thrown


I observe, that errors in the route definition lead to a silent shutdown of the application, caused by Camel. How can I configure Camel to telling me what exactly it dislikes.

Simple example: Assigning duplicate route names

If I define two routes with different names [by using: .id ("route name")], then the application starts and reports readiness.

If I mistakenly use a name twice, the application fails to start completely and Camel announces:

Apache Camel 2.22.0 (CamelContext: camel-1) is shutting down
Apache Camel 2.22.0 (CamelContext: camel-1) uptime 0.332 seconds
Apache Camel 2.22.0 (CamelContext: camel-1) is shutdown in 0.017 seconds
Stopping service [Tomcat]
HikariPool-1 - Shutdown initiated ...
HikariPool-1 - Shutdown completed.
Process finished with exit code 0

The exit code 0 seems to suggest a non-exceptional shutdown.

The same early shutdown happened, when I added a CronScheduledRoutePolicy to a route. [e.g. with .routePolicy (policy)] It shuts down if I add a default instance or if I make any settings to the policy.

I increased the log level and got significantly more background noise, but no new findings. [using application.yml: logging: level: ROOT: DEBUG] A try catch around the route definition didn't help. No exception was caught at the time of the route definition.

I tried to set the CronScheduledRoutePolicy an exception handler. [E.g. with policy.setExceptionHandler (myCamelExceptionHandlerLoggingEverything)] Nothing got logged. No breakpoint was hit.

I would be very grateful for your help or references to any solutions.

Ralf


Solution

  • There are multiple ways to print an exact error and it depends on how developer design app/class with the camel route. I have mentioned below example which will give exact error you are looking for.

    public class CamelPrintingExample {
    
       public static void main(String[] args) throws Exception {
          CamelContext camelContext = new DefaultCamelContext();
          try {
             camelContext.addRoutes(new RouteBuilder() {
                public void configure() {
    
    
                   from("file:C:\\input\\").routeId("demo")
                      .to("file:C:\\output\\").end();
    
                   from("file:C:\\input\\").routeId("demo")
                     .to("file:C:\\output\\").end();
    
                }
             });
             camelContext.start();
             Thread.sleep(300000);
             camelContext.stop();
          } catch (Exception camelException) {    
             camelException.printStackTrace();
    
          }
       }
    }
    

    By running this I got below error. org.apache.camel.FailedToStartRouteException: Failed to start route demo because of duplicate id detected: demo. Please correct ids to be unique among all your routes.