ApacheCamel FTP-上下文启动和停止之间的最佳实践是什么

ApacheCamel FTP-上下文启动和停止之间的最佳实践是什么,ftp,apache-camel,Ftp,Apache Camel,我编写了一些代码从FTP站点下载文件,如下所示: CamelContext context = new DefaultCamelContext(); context.addRoutes(new RouteBuilder() { public void configure() { from( uri ).to( localBox ); } }); context.start(); // a te

我编写了一些代码从FTP站点下载文件,如下所示:

CamelContext context = new DefaultCamelContext();
    context.addRoutes(new RouteBuilder() {
          public void configure() {
              from( uri ).to( localBox );
          }
      });
    context.start();
    // a tedious sleepy thread !?
    // TODO: work around for a better solution
    Thread.sleep(20000);
    context.stop();
我正在寻找一个更好的解决方案,而不是Thread.sleep方法。是否有可能得到完成转会的剩余时间


谢谢

通常,您会将这些代码嵌入到一些实际运行的应用程序中,例如web应用程序、一些客户端gui应用程序、ApacheSmx内部的OSGi包或诸如此类的应用程序中

但是,如果这是您想要运行的唯一代码(即批处理作业或类似的代码),则有一种标准方法可以使用独立的Camel来执行您想要的操作。阅读文章。

主要答案 以下语法将在不使用Thread.sleep的情况下为您提供所需的功能:

其他建议 本页有几页。然而,如果您正在使用这些方法,那么很可能您没有按照预期使用camel。正如@Petter所说,Camel通常用于连续运行的服务器上

在这里,当我们想要以“一次性”的方式运行路线时,我们通常只使用生产者,如中所示:

您可以使用类似的技术向负责使用DSL关闭的路由发送消息,如
shutdownRoute
shutdownRunningTask
或某种退出应用程序的
处理器


一旦您有了这样的路由,您就可以向应用程序发送调用该路由并干净退出的适当消息(或者,使用Camel的主类实例并启用挂起支持,在您向正在运行的应用程序发送Ctrl+C时会帮您解决这个问题)。

谢谢您的回复。我已经体验了大约一周的ApacheCamel。就我所阅读的文档和教程而言,正如您所说,它旨在用于服务器上。我将技术选择切换到Jcraft的JSCH库,并实现了一个可以正常工作的客户端。
context.getShutdownStrategy().setTimeout(20000);
@Required
protected ProducerTemplate producer;

public Object getObjectFromRoute(String routeId, Object payloadBody) {
    return producer.requestBody(routeId, payloadBody);
}