【问题标题】:How to poll oldest files first using ftp inbound endpoint in Mule如何在 Mule 中使用 ftp 入站端点首先轮询最旧的文件
【发布时间】:2014-04-04 03:44:40
【问题描述】:

我正在研究一个在 Mule 中使用 FTP 端点的用例。

我希望 FTP 入站端点应该首先轮询最旧的文件。目前它正在随机轮询文件。

有没有办法配置FTP先轮询最旧的文件(文件已放在FTP共享文件夹的最前面)?

有人可以建议我实现这个用例的解决方案吗?

谢谢

【问题讨论】:

    标签: ftp mule mule-studio


    【解决方案1】:

    我相信您必须扩展默认的 Mule FtpConnectionFactory 类并将您的新类设置为 FTP 连接器中名为 connectionFactoryClass 的属性。对于实际排序,您需要扩展工厂使用的Apache FTPClient 类,并使用按时间戳对文件列表进行排序的方法。覆盖FTPClient.initiateListParsing() 方法可能就足够了。

    【讨论】:

    • 感谢 Anton,我创建了新类扩展 FtpConnectionFactory 并添加到 FTP 连接器。我的新类构造函数被调用。如何扩展 FTPClient 以及应该在哪里覆盖initialListParsing()。如果有,请分享示例代码。
    • 抱歉,我不是 Apache commons-net 库方面的专家。我建议您检查源代码或/并为此创建一个单独的问题。 apache.googlesource.com/commons-net
    【解决方案2】:

    我在 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);
    }
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2017-05-20
      相关资源
      最近更新 更多