Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 仅在调用直接组件时执行路由_Apache Camel_Spring Camel - Fatal编程技术网

Apache camel 仅在调用直接组件时执行路由

Apache camel 仅在调用直接组件时执行路由,apache-camel,spring-camel,Apache Camel,Spring Camel,每当调用“直接”路由时,我都要解压缩文件。我从其他直接路径获取的文件名 from("direct:unZipFile") .from("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}&idempotent=true") .split(new ZipSplitter()) .streaming()

每当调用“直接”路由时,我都要解压缩文件。我从其他直接路径获取的文件名

from("direct:unZipFile")
                .from("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}&idempotent=true")
                .split(new ZipSplitter())
                .streaming()
                .to("file:C:\\MYFILES\\File\\Unzipped\\")
                .split(body().convertToString().tokenize("\n"))
                .transform()
                .simple("${in.body}")
                .end();

现在,当我调用direct组件时,它可以工作了,但它也会继续扫描目录并处理相同的文件。我知道上面的代码允许从direct和file组件执行触发器,但我只希望它从“direct”组件执行,我不能删除“file”组件,因为只有我在读取文件。

您可以使用consumerTemplate

from("direct:unZipFile")
                .process(exchange -> { 
                    Exchange recvFiles = exchange.getContext().createConsumerTemplate().receive("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}&idempotent=true");
exchange.getIn().setBody(recvFiles.getIn().getBody());
exchange.getIn().getHeaders().putAll(recvFiles.getIn().getHeaders());
})
                .split(new ZipSplitter())
                .streaming()
                .to("file:C:\\MYFILES\\File\\Unzipped\\")
                .split(body().convertToString().tokenize("\n"))
                .transform()
                .simple("${in.body}")
                .end();

你也可以试着使用它

from("direct:unZipFile")
.pollEnrich.simple("file:C:\\MYFILES\\File\\Unzipped\\?fileName=${header.fileName}")
.split(new ZipSplitter())
.streaming()
...

您也可以使用
java.io.File
设置消息体,在这里您可以用几行java代码计算文件名,但是,除此之外,PollRich是用于此目的的EIP模式解决方案