CamelContext.start () не блокирует - PullRequest
3 голосов
/ 04 декабря 2009

Я хочу запустить простой 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 секунд.

Однако, если я запускаю тот же код с использованием Apache Camel 1.6.2, метод start() автоматически блокируется, и мне не нужно переводить основной поток в спящий режим, чтобы скопировать файлы. Я не нашел подсказки, что это поведение изменилось с Camel 1.x на 2.x. Это действительно предполагаемое поведение? Можно ли позволить методу start () блокировать выполнение в Camel 2.0.0?

Спасибо

Ответы [ 2 ]

10 голосов
/ 10 марта 2010

Или вы можете добавить

Thread.currentThread().join();

после context.start ();

7 голосов
/ 04 декабря 2009

Да, вызов start () в контексте верблюда никогда не должен блокировать поток. И это правильное поведение Camel 2.0.

Вы можете использовать класс MainSupport из org.apache.camel.util в качестве отправной точки для блокировки до тех пор, пока не нажмете Ctrl + C или вызовите stop () в CamelContext.

См., Например, Main в Camel-Spring, который расширяет MainSupport и способен загружать Camel из XML-файла Spring.

...