Apache camel 驼峰文件组件-跳过文件

Apache camel 驼峰文件组件-跳过文件,apache-camel,Apache Camel,我正在使用camel文件组件轮询目录中的文件。 在我处理文件之前必须满足一些条件, 如果没有,camel应跳过该文件,而不删除/移动该文件,并 转到下一个 为此,我使用以下方法: public InputStream myMethod(@Body InputStream is, @Headers .....) { if( !checkPrerequisites ) throw new MyRuntimeException("conditions not satisfied yet");

我正在使用camel文件组件轮询目录中的文件。 在我处理文件之前必须满足一些条件, 如果没有,camel应跳过该文件,而不删除/移动该文件,并 转到下一个

为此,我使用以下方法:

public InputStream myMethod(@Body InputStream is, @Headers .....) {

if( !checkPrerequisites )
    throw new MyRuntimeException("conditions not satisfied yet");
因此,我想知道是否有其他方法来归档所需的行为。

您可以实现一个。创建过滤器,如下所示:

public class AnotherFileExistsFilter<T> implements GenericFileFilter<T> {

    @Override
    public boolean accept(GenericFile<T> firstFile) {
        return Files.exists(Paths.get("/some/other/folder/" + firstFile.getFileName()));
    }
}
public类另一个FileExistsFilter实现GenericFileFilter{
@凌驾
公共布尔接受(GenericFile firstFile){
return Files.exists(path.get(“/some/other/folder/”+firstFile.getFileName());
}
}
使用
filter=#另一个文件existsbeanname
将其添加到端点

如果要继续检查文件,请设置
idempotent=false
,我建议设置一个延迟(
delay=xxx
,以毫秒为单位),以便不连续轮询文件夹

更多详细信息请参见。

您可以实现一个。创建过滤器,如下所示:

public class AnotherFileExistsFilter<T> implements GenericFileFilter<T> {

    @Override
    public boolean accept(GenericFile<T> firstFile) {
        return Files.exists(Paths.get("/some/other/folder/" + firstFile.getFileName()));
    }
}
public类另一个FileExistsFilter实现GenericFileFilter{
@凌驾
公共布尔接受(GenericFile firstFile){
return Files.exists(path.get(“/some/other/folder/”+firstFile.getFileName());
}
}
使用
filter=#另一个文件existsbeanname
将其添加到端点

如果要继续检查文件,请设置
idempotent=false
,我建议设置一个延迟(
delay=xxx
,以毫秒为单位),以便不连续轮询文件夹



更多详细信息请参见。

是关于文件名、文件大小等的条件,还是关于文件中数据的条件?条件是另一个文件存在于另一个目录中,如果还没有,我想跳过当前文件,稍后再试。如果您首先在第二个目录中查找该文件,并且只有当该文件到达时才在当前目录中拾取该文件,是否会更容易?也就是说,直到第一个文件到达,当前目录的路由才会启动。那么,我也会遇到同样的问题,反之亦然。在这种情况下,route1正在轮询第二个目录中的某个文件,并且只有当该文件到达时,它才会启动route2,它会拾取当前目录中的文件。或者,您不需要两条路线。在route1中,一旦第一个文件到达,您可以使用enrich来获取第二个文件。是关于文件名、文件大小等的条件,还是关于文件中数据的条件?条件是另一个文件存在于另一个目录中,如果还没有,我想跳过当前文件,稍后再试。如果您首先在第二个目录中查找该文件,并且只有当该文件到达时才在当前目录中拾取该文件,是否会更容易?也就是说,直到第一个文件到达,当前目录的路由才会启动。那么,我也会遇到同样的问题,反之亦然。在这种情况下,route1正在轮询第二个目录中的某个文件,并且只有当该文件到达时,它才会启动route2,它会拾取当前目录中的文件。或者,您不需要两条路线。在route1中,一旦第一个文件到达,您就可以使用enrich抓取第二个文件。这将继续处理下一个文件,还是在处理第一个文件之前它将处于空闲状态?不,在处理第一个文件之前它不会处于空闲状态。Camel将在重试任何文件之前处理目录中的所有文件。我遇到以下错误:
没有类型转换器可用于从类型:java.lang.String转换为所需类型:org.apache.Camel.component.file.GenericFileFilter
听起来您没有正确引用bean:。您需要确保您已经注册了GenericFileFilter bean,并且在端点中使用了该bean名称。到目前为止,我为这个问题创建了一个新的问题。下一个文件会继续这样做吗?还是在处理第一个文件之前它是空闲的?不,在处理第一个文件之前它不会空闲。Camel将在重试任何文件之前处理目录中的所有文件。我遇到以下错误:
没有类型转换器可用于从类型:java.lang.String转换为所需类型:org.apache.Camel.component.file.GenericFileFilter
听起来您没有正确引用bean:。您需要确保您已经注册了GenericFileFilter bean,并且您正在端点中使用该bean名称。感谢您,到目前为止,我已经为这个问题创建了一个新问题