代码之家  ›  专栏  ›  技术社区  ›  Christoph Metzendorf

camelContext.start()不阻止

  •  3
  • Christoph Metzendorf  · 技术社区  · 15 年前

    我想运行一个简单的 Apache Camel 将文件从一个目录复制到另一个目录的示例:

    CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
    
      public void configure () throws Exception {
        from("file://c:/fromdir/").to("file://c:/todir/");
      } 
    });
    context.start();
    

    如果我使用apache camel 2.0.0运行这个示例,程序将在 context.start(); 什么也不做。如果我添加 Thread.sleep(30000); 开始后 CamelContext 后台线程完成它们的工作,文件从源目录复制到目标目录30秒。

    但是,如果我使用ApacheCamel 1.6.2运行相同的代码, start() 方法会自动阻塞,我不需要让主线程进入睡眠状态来复制文件。我没有发现这种行为从camel 1.x改为2.x的提示。这真的是预期的行为吗?是否可以让start()方法在camel 2.0.0中阻止执行?

    谢谢

    2 回复  |  直到 8 年前
        1
  •  7
  •   Himanshu Bhardwaj    8 年前

    是的,在camel上下文中调用start()不应该阻塞线程。骆驼2.0的正确行为。

    您可以使用org.apache.camel.util中的mainsupport类作为阻止的起点,直到在cameContext上单击ctrl+c或call stop()。

    例如,参见camel spring中的main,它扩展了主支持,并且能够从一个spring XML文件加载camel。

        2
  •  10
  •   eirikma    15 年前

    或者你可以添加

    Thread.currentThread().join();
    

    在context.start()之后;