Apache Camel 在启动后立即关闭,没有记录任何原因,也没有抛出异常

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

我观察到,路由定义中的错误导致应用程序静默关闭,这是由 Camel 引起的。我如何配置 Camel 来告诉我它到底不喜欢什么。

简单示例:分配重复的路由名称

如果我[通过使用:.id ("route name")]定义了两个不同名称的路由,那么应用程序会启动并报告准备就绪。

如果我错误地使用同一个名字两次,应用程序将无法完全启动,Camel 会提示:

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

退出代码 0 似乎表明非异常关机。

当我将 CronScheduledRoutePolicy 添加到路由时,同样的提前关闭发生了。 [例如。与.routePolicy(政策)] 如果我添加默认实例或对策略进行任何设置,它就会关闭。

我提高了日志级别并获得了明显更多的背景噪音,但没有新发现。 [使用 application.yml: 日志记录: 级别: ROOT: DEBUG] 尝试捕获路由定义并没有帮助。路由定义时未捕获异常。

我试图将 CronScheduledRoutePolicy 设置为异常处理程序。 [例如。使用 policy.setExceptionHandler (myCamelExceptionHandlerLoggingEverything)] 什么都没有记录。没有命中断点。

非常感谢您的帮助或对任何解决方案的参考。

拉尔夫

您可以尝试定义自定义关机策略。 Read here

有多种方法可以打印出确切的错误,这取决于开发人员如何使用骆驼路线设计 app/class。我在下面提到的示例将给出您正在寻找的确切错误。

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();

      }
   }
}

通过运行这个我得到了以下错误。 org.apache.camel.FailedToStartRouteException:由于检测到重复的 ID,无法启动路由演示:demo。请更正 ID,使其在所有路线中都是唯一的。

尝试在你的路线中添加这个然后启动它:

getContext().setTracing(true);

P.S。您的错误处理程序也可能有问题