【问题标题】:Is there any way to get the oldest file using mule requester?有什么方法可以使用 mule requester 获取最旧的文件?
【发布时间】:2015-10-08 09:45:56
【问题描述】:

我有一个要求,我需要首先使用 mule requester 处理最旧的文件。在 mule requester 的入站属性中,我们获取时间戳。从那里我们可以获取文件的时间。但是如何处理它?

【问题讨论】:

    标签: mule mule-component


    【解决方案1】:

    您将需要一个自定义组件来执行此操作,因为无法开箱即用(至少在 Mule 3.7.2 之前)。

    确实,FileMessageRequester 调用FileMessageDispatcher.getNextFile 来检索轮询目录中要处理的下一个文件。此方法依赖于选择要处理的第一个文件的私有方法,该方法不执行任何排序(也不提供任何注入排序的选项),如您所见here

    【讨论】:

    • 我可以使用拦截器类来修改排序吗?
    • 是的,你可以,这有点骇人听闻,但使用像 Byteman 这样的工具可以让你改变 FileMessageDispatcher.getFirstFile 的行为,以便根据时间返回第一个。
    • 我找到了可以使用端点中提供的 OlderFirstComparator 的地方。但它没有先返回旧文件?
    【解决方案2】:

    我找到了答案。这里是通过文件时间戳获取有序 mule 消息的代码 sn-p。

    DefaultMessageCollection test =(DefaultMessageCollection) message;
            List<MuleMessage> theList = new ArrayList<MuleMessage>();
            MuleMessage[] msg=test.getMessagesAsArray();
             for (MuleMessage muleMessage : msg) {
                 theList.add(muleMessage);
    
            }
    
            Collections.sort(theList, new Comparator<MuleMessage>(){
                public int compare(MuleMessage obj1, MuleMessage obj2) {
                    return ((Long)(obj1.getInboundProperty("timestamp"))).intValue()-((Long)(obj2.getInboundProperty("timestamp"))).intValue(); 
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多