我有一个课程来运行我的路线;输入来自队列(由执行查询的路由填充并将行作为消息插入队列中)
这些消息都包含几个标题: - pdu_id,基本上是对文件名的预取。 - pad:文件所在的路径
会发生什么:我希望文件位于tar中以" pdu_id"。*命名的路径中;之后,将执行REST调用以删除文档源。
我知道路线有来自;但基本上我需要一个带有动态"来自"的路线,如下面的代码示例所示,排队并不能解决问题。
问题是如何使用;我找不到类似的东西,但可能是我没有使用正确的谷歌搜索;在这种情况下,我非常抱歉。
public class ToDeleteTarAndDeleteRoute extends RouteBuilder {
@Override
public void configure() throws Exception
{
from("broker1:todelete.message_ids.queue")
.from("file:///?fileName=${in.header.pad}${in.header.pdu_id}.*")
.aggregate(new TarAggregationStrategy())
.constant(true)
.completionFromBatchConsumer()
.eagerCheckCompletion()
.to("file:///?fileName=${in.header.pad}${in.header.pdu_id}.tar")
.log("${header.pdu_id} tarred")
.setHeader(Exchange.HTTP_METHOD, constant("DELETE"))
.setHeader("Connection", constant("Close"))
.enrich()
.simple("http:127.0.0.1/restfuldb${header.pdu_id}?httpClient.authenticationPreemptive=true")
.log("${header.pdu_id} tarred and deleted.");
}
}
答案 0 :(得分:0)
是。民意调查可以帮助您做到这一点。你应该使用这样的东西:
from("broker1:todelete.message_ids.queue")
.aggregationStrategy(new TarAggregationStrategy())
.pollEnrich()
.simple("file:///?fileName=${in.header.pad}/${in.header.pdu_id}.*")
.unmarshal().string()
.to("file:///?fileName=${in.header.pad}/${in.header.pdu_id}.tar")
.log("${header.pdu_id} tarred")
.setHeader(Exchange.HTTP_METHOD, constant("DELETE"))
.setHeader("Connection", constant("Close"))
.enrich()
.simple("http:127.0.0.1/restfuldb${header.pdu_id}?httpClient.authenticationPreemptive=true")
.log("${header.pdu_id} tarred and deleted.");
答案 1 :(得分:0)
目前,该问题的解决方案包括基于@daBigBug所回答的一些变化。
我删除了unmarshal();我不明白为什么需要这样做;文件可以包含二进制内容。
from("broker1:todelete.message_ids.queue")
.pollEnrich()
.simple("file:${in.header.pad}?antInclude=${in.header.pdu_id}.*")
.aggregate(new TarAggregationStrategy())
.constant(true)
.completionFromBatchConsumer()
.eagerCheckCompletion()
.log("tarring to: ${header.pad}${header.pdu_id}.tar")
.setHeader(Exchange.FILE_NAME, simple("${header.pdu_id}.tar"))
.setHeader(Exchange.FILE_PATH, simple("${header.pad}"))
.to("file://ignored")
...(and the rest of the operations);
我现在看到文件被拾取,甚至放在焦油中;但是,tar的文件名是意外的,因为它是位置(它放在./ignored中);此外,在其余操作中,交换标头似乎丢失了。
如果有人可以帮助弄清楚如何以安全的方式保存标题......我非常感激。我应该为此使用新问题,还是应该重新解释这个问题。