仅在调用直接组件时执行路由
Execute route only when direct component is called
我想在调用 "direct" 路由时解压缩文件。我从其他直接路径获取的文件名。
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" 组件执行,我无法删除 "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();
你也可以尝试使用pollenrich
from("direct:unZipFile")
.pollEnrich.simple("file:C:\MYFILES\File\Unzipped\?fileName=${header.fileName}")
.split(new ZipSplitter())
.streaming()
...
你也可以只用 java.io.File
设置消息正文,你可以在几行 Java 代码中计算文件名,但是 pollEnrich 是 EIP 模式的解决方案.
我想在调用 "direct" 路由时解压缩文件。我从其他直接路径获取的文件名。
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" 组件执行,我无法删除 "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();
你也可以尝试使用pollenrich
from("direct:unZipFile")
.pollEnrich.simple("file:C:\MYFILES\File\Unzipped\?fileName=${header.fileName}")
.split(new ZipSplitter())
.streaming()
...
你也可以只用 java.io.File
设置消息正文,你可以在几行 Java 代码中计算文件名,但是 pollEnrich 是 EIP 模式的解决方案.