![](/img/trans.png)
[英]Can we move a file from an FTP server to a local directory using apache camel endpoints?
[英]Apache Camel - Build both from and to endpoints dynamically
我有一条骆驼路线,该路线可以处理来自process queue
的消息,并将其发送到upload queue
。
from("activemq:queue:process" ).routeId("activemq_processqueue")
.process(exchange -> {
SomeImpl impl = new SomeImpl();
impl.process(exchange);
})
.to(ExchangePattern.InOnly, "activemq:queue:upload");
在impl.process
我正在填充Id
和destination server path
。 现在,我需要定义一条新路径,该路径将使用上载队列中的消息,并复制一个本地文件夹(基于先前路由中生成的ID),然后将其上传到ftp服务器的目标文件夹中(这也填充在先前路由中)
那么,如何设计一条新的路由,使往返的端点都是动态的,如下所示?
from("activemq:queue:upload" )
.from("file:basePath/"+{idFromExchangeObject})
.to("ftp:"+{serverIpFromExchangeObject}+"/"+{pathFromExchangeObject});
可以使用.toD()
在Camel网站上为端点添加动态(如注释中所述) ,此页面上对此进行了介绍。 我不知道任何fromD()
等效项。 但是,你可以通过调用添加动态路由addRoutes
的方法CamelContext
。 这在Camel网站上的本页中进行了描述。
在Camel网站的示例中稍微扩展一下,应该可以使您朝正确的方向前进。
public void process(Exchange exchange) throws Exception {
String idFromExchangeObject = ...
String serverIpFromExchangeObject = ...
String pathFromExchangeObject = ...
exchange.getContext().addRoutes(new RouteBuilder() {
public void configure() {
from("file:basePath/"+ idFromExchangeObject)
.to("ftp:"+ serverIpFromExchangeObject +"/"+pathFromExchangeObject);
}
});
}
由于此框架具有数量惊人的EIP和功能,因此Camel中可能还会有其他选择。
我认为您的情况还有更好的选择,可以认为您使用的骆驼版本比2.16更新。(存在以前版本的替代版本,但更复杂,看起来也不优雅-(例如,ConsumerTemplate和收件人列表) 。
您可以用pollEnrich替换第一个“ dynamic from”,它使用轮询使用者和简单表达式来丰富消息,以构建动态文件端点。 对于第二部分,正如已经提到的,动态uri.toD将完成工作。 因此,您的路线如下所示:
from("activemq:queue:upload" )
.pollEnrich().simple("file:basePath/${header.idFromExchangeObject})
.aggregationStrategy(new ExampleAggregationStrategy()) // * see explanation
.timeout(2000) // the timeout is optional but recommended
.toD("ftp:${header.serverIpFromExchangeObject}/${header.pathFromExchangeObject}")
请参阅“内容丰富器”部分“使用动态uri” http://camel.apache.org/content-enricher.html 。
您将需要一种聚合策略,以将原始交换与资源交换结合在一起,以确保在富集之后,头serverIpFromExchangeObject,pathFromExchangeObject将包含在聚合交换中。 如果您不包括自定义策略,那么Camel将默认使用从资源中获取的正文。 请查看content-enricher.html中的ExampleAggregationStrategy示例,以了解其工作原理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.