我的用例是定期轮询本地目录中的新文件列表,然后通过1连接将它们上传到FTP服务器。 Camel路由在Spring XML中定义如下:
<route>
<from uri="file:data/inbox?noop=true&delay=1000&maxMessagesPerPoll=3" />
<to uri="ftp:uid:xxxxx@host:21/data?disconnect=false"/>
</route>
路由运行良好,但FTP连接将保持连接,直到FTP服务器超时连接。我希望重复使用相同的连接来上传一批文件,然后在批处理中的最后一个文件完成上传时立即关闭连接。如何在Camel中实现这一目标?
答案 0 :(得分:2)
目前无法做到这一点。您需要编写一些代码来自行断开连接。
欢迎您登录JIRA以在camel-ftp中增强此功能:https://issues.apache.org/activemq/browse/CAMEL。例如,disconnectOnBatchComplete的新选项。
答案 1 :(得分:0)
可能有一种方法,但它不漂亮。
您可以尝试根据cronSchedulePolicy包装路线。所以说你每小时开始一次路线并轮询目录并发送文件。然后你只需添加一个stop()。不确定xml dsl中的停止是否完全相同。或者,您也可以写<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<p> Using .text to initialize the textarea allows .append and clearing</p>
<textarea readonly cols=50 rows=5 placeholder="First textarea : A" id="ta"></textarea>
<br>
<button type="button" id="AddText" onclick="AddText()">Add Text</button>
<button type="button" id="ClearText" onclick="ClearText()">Clear</button>
<br>
<p>Using .val to initialize the textarea does not allow .append after clearing</p>
<textarea readonly cols=50 rows=5 placeholder="Second textarea : B" id="tb"></textarea>
<br>
<button type="button" id="AddVal" onclick="AddVal()">Add Text</button>
<button type="button" id="ClearVal" onclick="ClearVal()">Clear</button>
<br>
<p>Using .val to initialize the textarea with the extra checks doesn't append at all.
<br>An alert is generated to show the append is called, but no appending occurs.</p>
<textarea readonly cols=50 rows=5 placeholder="Third textarea : C" id="tc"></textarea>
<br>
<button type="button" id="AddVal2" onclick="AddVal2()">Add Text</button>
<button type="button" id="ClearVal2" onclick="ClearVal2()">Clear</button>
并在该处理器内通过onExchangeComplete(new Processor(StopProcessor(routeId))
停止路线。这又取决于您的要求允许您这样做。
exchange.getContext.stopRoute(routeid)