有没有办法使用mule请求程序获取最旧的文件?

有没有办法使用mule请求程序获取最旧的文件?,mule,mule-component,Mule,Mule Component,我有一个要求,我需要首先使用mule requester处理最旧的文件。在mule requester的Inbound属性中,我们得到时间戳。从那里我们可以获取文件的时间。但是如何处理它呢?您需要一个自定义组件来完成这项工作,因为无法开箱即用(至少到mule 3.7.2) 实际上,FileMessageRequester调用FileMessageDispatcher.getNextFile来检索轮询目录中要处理的下一个文件。此方法依赖于一个私有方法来选择要处理的第一个文件,该方法不进行任何排序(

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

您需要一个自定义组件来完成这项工作,因为无法开箱即用(至少到mule 3.7.2)


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

我找到了我的答案。下面是按文件时间戳获取已排序mule消息的代码片段

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(); 
            }
        });
DefaultMessageCollection测试=(DefaultMessageCollection)消息;
List theList=new ArrayList();
MuleMessage[]msg=test.getMessagesAsArray();
for(多消息多消息:msg){
添加列表(多消息);
}
Collections.sort(列表,新比较器(){
公共整数比较(多消息obj1、多消息obj2){
return((Long)(obj1.getInboundProperty(“timestamp”)).intValue()-((Long)(obj2.getInboundProperty(“timestamp”)).intValue();
}
});

我可以使用interceptor类修改排序吗?可以,这是一个黑客程序,但使用Byteman这样的工具可以让您更改
FileMessageDispatcher.getFirstFile
的行为,以便根据时间返回第一个文件。我找到了使用endpoint中提供的OlderFirstComparator的地方。但它不会先返回旧文件吗?