Apache Camel Main-Class及其方法启动,停止,运行,暂停和恢复

时间:2014-04-17 12:25:02

标签: apache-camel

我正在写我的第一个骆驼应用程序。它是一个带有main方法的独立应用程序。作为起点,我使用了maven camel java archetype。它提供了一个简单的主要方法,可以调用main.run()

现在我稍微重新考虑了它并将main.run拉出来了一个新类(和方法),这将是我对所有骆驼东西的主要控制。 现在我想创建"对面" run()的方法。目前我想为启动(run())上下文的单个路径实现测试然后等待(此时我不确定如何等待路由完成)并停止上下文。

但是现在我发现了许多可以在Main类中启动和停止所有东西的方法。 Jvadoc没有帮助 - 一些方法是遗传的并不容易;-)。所以有人请告诉我:

的确切含义(或用例)
Main.run()
Main.start()
Main.stop()
Main.suspend()
Main.resume()

提前致谢。

2 个答案:

答案 0 :(得分:1)

请参阅此页面,了解各种Camel服务的生命周期

如果等到路线完成,那么您可以检查机上注册表是否有当前的机上交换以了解路线是否已完成。

答案 1 :(得分:1)

我们必须将方法分为2组。 第一个是生命周期http://camel.apache.org/lifecycle中描述的内容 第二个由运行和关闭组成。

run无限期运行,可以在调用shutdown时停止,后者必须在其他线程中调用并在运行调用之前发送。

示例:

import org.apache.camel.main.Main;

public class ShutdownTest {

    public static void main(String[] args) throws Exception {

       Main camel = new Main();

       camel.addRouteBuilder( new MyRouteBuilder() );

       // In this case the thread will wait a certain time and then invoke shutdown.
       MyRunnable r = new MyRunnable(5000, camel);

       r.excecute();

       camel.run();
    }
}

简单可运行类

public class MyRunnable implements Runnable {

    long waitingFor = -1;
    Main camel;

    public MyRunnable(long waitingFor, Main camel){
        this.waitingFor = waitingFor;
        this.camel = camel;
    }

    public void excecute(){

        Thread thread = new Thread(this);

        thread.start();
    }

    @Override
    public void run() {

        try {
            synchronized (this) {
                    this.wait( waitingFor );
            }
        } catch (InterruptedException e) {
        }

        try {
            System.out.println("camel.shutdown()");
            camel.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}