ApacheCamel-特定路由调用上的文件传输
我正在尝试创建一个webservice,当调用lookinto本地目录时,它会从那里拾取文件并上传到ftp服务器 我能够创建一个简单的路由,从本地目录中拾取文件并上传到ftp服务器,代码如下:ApacheCamel-特定路由调用上的文件传输,apache,apache-camel,spring-dsl,camel-ftp,Apache,Apache Camel,Spring Dsl,Camel Ftp,我正在尝试创建一个webservice,当调用lookinto本地目录时,它会从那里拾取文件并上传到ftp服务器 我能够创建一个简单的路由,从本地目录中拾取文件并上传到ftp服务器,代码如下: <route> <from uri="file://D:\\FTPTest?noop=true&delay=2000" /> <to uri="ftp://user@host.in:21/public_html/Enterpri
<route>
<from uri="file://D:\\FTPTest?noop=true&delay=2000" />
<to uri="ftp://user@host.in:21/public_html/EnterpriseProject?password=password123#"/>
<to uri="bean:myBean?method=test" />
</route>
请帮助我,并建议需要进行的更改以使其像这样工作。编辑:
您必须首先了解一件事,to
是生产者而不是消费者
你能做的是
@Autowired
private CamelContext context;// if you have more than one camel context use @Qualifier and wire by bean id
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
String serviceName = exchange.getIn().getHeader(Constants.SERVICE_NAME).toString();
context.startRoute(serviceName+Constants.NEXT_ROUTE_APPENDER);// here in nextroute you must give the routeid
}
你的路线一定像
<route id = "<value of serviceName+Constants.NEXT_ROUTE_APPENDER>" autoStartup = "false">
<from uri="file://D:\\FTPTest..." />
<onCompletion onFailureOnly="true">
<choice>
<when>
<simple>${property.CamelBatchComplete}</simple>
<process ref="asyncSelfShutdownProcessor"/>
</when>
</choice>
</onCompletion>
<to uri="ftp://user@host.in:21..."/>
</route>
据强强刮刮刮刮刮刮刮方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方本35现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场###
旧版:
好的,我理解您的需要,因为您有一个将文件从文件系统移动到ftp服务器的路由,您所需要的只是这个路由,只有当您从rest服务触发时才能执行。我会这样做
*我将创建路由autoStartup=“false”
,并将其分配为id=“fs to ftp”
<route id = "fs-to-ftp" autoStartup = "false">
<from uri="file://D:\\FTPTest..." />
<onCompletion onFailureOnly="true">
<process ref="asyncSelfShutdownProcessor"/>
</onCompletion>
<to uri="ftp://user@host.in:21..."/>
</route>
***将camel上下文依赖项添加到rest服务,并在rest服务上下文.startRoute(“fs到ftp”)
编辑:
您必须首先了解一件事,to
是生产者而不是消费者
你能做的是
@Autowired
private CamelContext context;// if you have more than one camel context use @Qualifier and wire by bean id
public void process(Exchange exchange) throws Exception {
String body = exchange.getIn().getBody(String.class);
String serviceName = exchange.getIn().getHeader(Constants.SERVICE_NAME).toString();
context.startRoute(serviceName+Constants.NEXT_ROUTE_APPENDER);// here in nextroute you must give the routeid
}
你的路线一定像
<route id = "<value of serviceName+Constants.NEXT_ROUTE_APPENDER>" autoStartup = "false">
<from uri="file://D:\\FTPTest..." />
<onCompletion onFailureOnly="true">
<choice>
<when>
<simple>${property.CamelBatchComplete}</simple>
<process ref="asyncSelfShutdownProcessor"/>
</when>
</choice>
</onCompletion>
<to uri="ftp://user@host.in:21..."/>
</route>
据强强刮刮刮刮刮刮刮方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方方本35现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场现场###
旧版:
好的,我理解您的需要,因为您有一个将文件从文件系统移动到ftp服务器的路由,您所需要的只是这个路由,只有当您从rest服务触发时才能执行。我会这样做
*我将创建路由autoStartup=“false”
,并将其分配为id=“fs to ftp”
<route id = "fs-to-ftp" autoStartup = "false">
<from uri="file://D:\\FTPTest..." />
<onCompletion onFailureOnly="true">
<process ref="asyncSelfShutdownProcessor"/>
</onCompletion>
<to uri="ftp://user@host.in:21..."/>
</route>
***将camel上下文依赖项添加到rest服务,并在rest服务
上下文中按id启动路由。startRoute(“fs到ftp”)
您应该尝试
在示例部分,您可以找到一个关于文件的示例
您的路线应该是这样的(我只使用camel java dsl,所以这是一段xml伪代码):
您应该尝试 在示例部分,您可以找到一个关于文件的示例 您的路线应该是这样的(我只使用camel java dsl,所以这是一段xml伪代码):
感谢您的回复@Sagar,实际上我正在用so从restlet调用其他路由,我如何才能调用具有特定id的路由?我有什么方法可以在路由中提供此信息并执行文件传输过程吗?实际上,如果您想使用
,那么您必须读取文件并将其流式传输到“direct:fileTransferRoute”
以编程方式,camel不会自行选择可能是您应该添加restful服务代码,以便更好地了解您的场景。我添加了所有相关代码,现在可以帮助我了。谢谢您的回复@Sagar,实际上我正在用so从restlet呼叫其他路线,如何调用具有特定id的路由?是否有任何方法可以在路由中提供此id并执行文件传输过程?实际上,如果您想使用
,则必须读取文件并将其流式传输到“direct:fileTransferRoute”
以编程方式,camel不会自行选择。可能您应该添加restful服务代码,以便更好地了解您的场景。我添加了所有相关代码,请立即帮助我。我已将您的路线作为示例添加到我的答案中。元素“pollRich”中不允许出现属性“uri”。很奇怪,我犯了这个错误。但是,它可以正常工作:file://D:\\FTPTest?noop=true&;延迟=2000;这就是我想要的谢谢lot@Siddharth错误取决于这样一个事实,即camel 2.15rich
和pollrich
语法与答案相似,从camel 2.16开始,语法发生了一些变化,与您的注释类似。我已将您的路线作为示例添加到我的答案中。元素“pollRich”中不允许出现属性“uri”。很奇怪,我犯了这个错误。但是,它可以正常工作:file://D:\\FTPTest?noop=true&;延迟=2000;这就是我想要的谢谢lot@Siddharth错误取决于这样一个事实,即直到camel 2.15rich
和pollrich
语法与答案类似,而camel 2.16的语法发生了一些变化,其工作方式与您的注释类似。
<route id = "fs-to-ftp" autoStartup = "false">
<from uri="file://D:\\FTPTest..." />
<onCompletion onFailureOnly="true">
<process ref="asyncSelfShutdownProcessor"/>
</onCompletion>
<to uri="ftp://user@host.in:21..."/>
</route>
asyncSelfShutdownProcessor= AsyncProcessorConverterHelper.convert(exchange -> {
new Thread(() -> context.stopRoute("fs-to-ftp")).start();
});
<route>
<from uri="direct:fileTransferRoute" />
<pollEnrich uri="file://D:\\FTPTest?fileName=data.txt....." />
<to uri="ftp://user@host.in:21/public_html/EnterpriseProject?password=password123#"/>
</route>