如何使用Spring DSL保持主要的Camel线程活跃

时间:2013-03-02 21:11:51

标签: java multithreading apache-camel middleware

我正在开发我的第一个真正的基于Camel的Java应用程序,并且遇到了一个奇怪的,复杂的问题,我相信是主要Camel线程死亡/完成的结果。

基本上,路由本身只包含几个处理器,其中一个处理器执行一些繁重的计算,需要20 - 25秒才能完成。应用程序作为一个整体正在终止而不会抛出任何异常/错误/日志语句是任何其他迹象表明出现了问题,并且在进行这些昂贵的计算时正在死亡。

我不是在找任何人来诊断我的问题,我只想要一种方法来强制Camel路线保持活力,因为我相信正在发生的事情是主要的Camel线程正在到达路径的结束,停止它,并关闭应用程序。我想强迫主要的Camel线程保持活动,比如60秒,看看我是否至少可以把它排除在外。

如果使用Java DSL,我只需将以下内容添加到路径的末尾:

.to(new Processor() {
    @Override
    public void process(Exchange exchange) {
        try {
            Thread.sleep(60000);
        } catch(Throwable t) {
            // ...
        }
    }
})
.to("direct:endOfRoute");

我正在使用Spring DSL(XML) - 任何想法?提前谢谢!

1 个答案:

答案 0 :(得分:3)

路由完成不会终止您的Camel应用程序/上下文,您只需要确保实例化上下文的容器继续运行...

请参阅http://camel.apache.org/running-camel-standalone-and-have-it-keep-running.html

说,根据您的具体问题,您可以使用delayer EIP在您的路线中引入明确的延迟