重用 Camel FTP 路线
Reuse Camel FTP route
我有一个全局定义的 FTP 骆驼路线。它是从另一条路线开始的:
exchange.getContext().startRoute("downloadRoute");
并在另一个线程中停止,如所述here:
.process(new Processor() {
Thread stop;
@Override
public void process(final Exchange exchange) throws Exception {
stop = new Thread() {
@Override
public void run() {
try {
log.info("Stopping route");
exchange.getContext().stopRoute("downloadRoute");
} catch (Exception e) {
} finally {
latch.countDown();
}
}
};
stop.start();
}
})
它工作正常。现在我想重新开始这条路线。假设我在文件夹中添加了新文件并想重新下载它们,或者重新下载已下载的文件。
所以我用相同的命令再次启动这条路线,但它不下载文件 - 它根本看不到它们,因为它们在路线的某处标记为已下载。而如果我从骆驼上下文中删除这条路线然后再次添加它并开始 - 它有效 - 它会再次下载文件。
所以问题是如何重用(开始-停止-开始)现有路线,使其作为新路线开始?
我认为一般来说,这是对 Apache Camel 的误用。路由并不意味着在应用程序中反复启动或停止。 Camel 中的路由通常是要定义的,然后在应用程序启动时启动,然后直到应用程序停止时才停止。
如果您想使用基于 file consumer 的路由(文件、FTP、SFTP 等)按需重新下载文件,我认为正确的方法是将文件从 .camel 目录(默认情况下下载的文件放置在该目录中)移回由文件消耗监视的目录。如果需要,您可以很容易地以编程方式执行此操作。
这应该会导致 Camel 重新下载文件。完成后,Camel 会将它们放回 .camel 目录中。如果需要,您还可以使用 move 文件组件标志(.camel 是默认设置)使用与 .camel 不同的目录。
我有一个全局定义的 FTP 骆驼路线。它是从另一条路线开始的:
exchange.getContext().startRoute("downloadRoute");
并在另一个线程中停止,如所述here:
.process(new Processor() {
Thread stop;
@Override
public void process(final Exchange exchange) throws Exception {
stop = new Thread() {
@Override
public void run() {
try {
log.info("Stopping route");
exchange.getContext().stopRoute("downloadRoute");
} catch (Exception e) {
} finally {
latch.countDown();
}
}
};
stop.start();
}
})
它工作正常。现在我想重新开始这条路线。假设我在文件夹中添加了新文件并想重新下载它们,或者重新下载已下载的文件。
所以我用相同的命令再次启动这条路线,但它不下载文件 - 它根本看不到它们,因为它们在路线的某处标记为已下载。而如果我从骆驼上下文中删除这条路线然后再次添加它并开始 - 它有效 - 它会再次下载文件。
所以问题是如何重用(开始-停止-开始)现有路线,使其作为新路线开始?
我认为一般来说,这是对 Apache Camel 的误用。路由并不意味着在应用程序中反复启动或停止。 Camel 中的路由通常是要定义的,然后在应用程序启动时启动,然后直到应用程序停止时才停止。
如果您想使用基于 file consumer 的路由(文件、FTP、SFTP 等)按需重新下载文件,我认为正确的方法是将文件从 .camel 目录(默认情况下下载的文件放置在该目录中)移回由文件消耗监视的目录。如果需要,您可以很容易地以编程方式执行此操作。
这应该会导致 Camel 重新下载文件。完成后,Camel 会将它们放回 .camel 目录中。如果需要,您还可以使用 move 文件组件标志(.camel 是默认设置)使用与 .camel 不同的目录。