gpt4 book ai didi

java - 如何制作可以自动关闭的独立 Camel 应用程序?

转载 作者:搜寻专家 更新时间:2023-10-31 19:56:47 26 4
gpt4 key购买 nike

我有一个简单的文件传输应用程序,它作为独立的 Java 应用程序运行。它从 SFTP 端点获取文件并将它们移动到另一个端点。

文件在传输后会从 SFTP 端点中删除。 当没有更多文件剩余时,最好让程序结束。但是,我一直无法找到可以启动 Camel 并让它有条件地结束(比如当 SFTP 端点中没有更多文件时) 的解决方案。我目前的解决方法是启动 Camel,然后让主线程 hibernate 很长时间。然后用户必须手动终止应用程序(通过 CTRL+C 或其他方式)。

是否有更好的方法让应用程序自动终止?

下面是我当前的代码:

在 CamelContext(Spring 应用上下文)中:

<route>
<from uri="sftp:(url)" />
<process ref="(processor)" />
<to uri="(endpoint)" />
</route>

main() 方法:

public static void main(String[] args)
{
ApplicationContext appContext = new ClassPathXmlApplicationContext("applicationContext.xml");
CamelContext camelContext = appContext.getBean(CamelContext.class);

try
{
camelContext.start();
Thread.sleep(1000000000); // Runs the program for a long time -- is there a better way?
}
catch (Exception e)
{
e.printStackTrace();
}

UploadContentLogger.info("Exiting");
}

最佳答案

你可以像这样改变你的路线:

<route>
<from uri="sftp:(url)?sendEmptyMessageWhenIdle=true" />
<choose>
<when>
<simple>${body} != null</simple>
<process ref="(processor)" />
<to uri="(endpoint)" />
</when>
<otherwise>
<process ref="(shutdownProcessor)" />
</otherwise>
</choose>
</route>

注意使用 sendEmptyMessageWhenIdle=true

这里是shutdownProcessor

public class ShutdownProcessor {
public void stop(final Exchange exchange) {
new Thread() {
@Override
public void run() {
try {
exchange.getContext().stop();
} catch (Exception e) {
// log error
}
}
}.start();
}
}

实际上我没有运行这段代码,但它应该可以正常工作。

关于java - 如何制作可以自动关闭的独立 Camel 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12918820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com