【发布时间】:2014-04-04 03:44:40
【问题描述】:
我正在研究一个在 Mule 中使用 FTP 端点的用例。
我希望 FTP 入站端点应该首先轮询最旧的文件。目前它正在随机轮询文件。
有没有办法配置FTP先轮询最旧的文件(文件已放在FTP共享文件夹的最前面)?
有人可以建议我实现这个用例的解决方案吗?
谢谢
【问题讨论】:
标签: ftp mule mule-studio
我正在研究一个在 Mule 中使用 FTP 端点的用例。
我希望 FTP 入站端点应该首先轮询最旧的文件。目前它正在随机轮询文件。
有没有办法配置FTP先轮询最旧的文件(文件已放在FTP共享文件夹的最前面)?
有人可以建议我实现这个用例的解决方案吗?
谢谢
【问题讨论】:
标签: ftp mule mule-studio
我相信您必须扩展默认的 Mule FtpConnectionFactory 类并将您的新类设置为 FTP 连接器中名为 connectionFactoryClass 的属性。对于实际排序,您需要扩展工厂使用的Apache FTPClient 类,并使用按时间戳对文件列表进行排序的方法。覆盖FTPClient.initiateListParsing() 方法可能就足够了。
【讨论】:
我在 sftp 连接器中做过类似的事情,但我在文件名中有时间戳。 如果时间戳或在某些基础上我们可以对文件进行排序,我们可以尝试这种方法。 它轮询目录带来所有文件名,在连接器中配置服务覆盖,根据时间戳对文件名进行排序,然后路由。粘贴示例代码以供参考。我们也可以尝试用 ftp 做类似的事情。
覆盖服务覆盖类中的 poll()
public void poll(){
String[] files = sftpRRUtil.getAvailableFiles(false);
List<String> orderedFileList = sortAllFileNamesByTime(files);
Map<String,String> eventStateMap=new HashMap<String,String>();
for (String file : orderedFileList){
if (getLifecycleState().isStopping()){
break;
}
routeFile(file);
}
...
【讨论】: