【发布时间】:2015-10-08 09:45:56
【问题描述】:
我有一个要求,我需要首先使用 mule requester 处理最旧的文件。在 mule requester 的入站属性中,我们获取时间戳。从那里我们可以获取文件的时间。但是如何处理它?
【问题讨论】:
标签: mule mule-component
我有一个要求,我需要首先使用 mule requester 处理最旧的文件。在 mule requester 的入站属性中,我们获取时间戳。从那里我们可以获取文件的时间。但是如何处理它?
【问题讨论】:
标签: mule mule-component
您将需要一个自定义组件来执行此操作,因为无法开箱即用(至少在 Mule 3.7.2 之前)。
确实,FileMessageRequester 调用FileMessageDispatcher.getNextFile 来检索轮询目录中要处理的下一个文件。此方法依赖于选择要处理的第一个文件的私有方法,该方法不执行任何排序(也不提供任何注入排序的选项),如您所见here。
【讨论】:
FileMessageDispatcher.getFirstFile 的行为,以便根据时间返回第一个。
我找到了答案。这里是通过文件时间戳获取有序 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();
}
});
【讨论】: