2015-10-08 40 views

回答

0

你將需要一個自定義組件來做到這一點,因爲沒有辦法開箱即用(至少達到Mule 3.7.2)。

實際上,FileMessageRequester調用FileMessageDispatcher.getNextFile來檢索要在輪詢目錄中處理的下一個文件。此方法依賴於選擇要處理的第一個文件的私有方法,該方法不執行任何排序(也不提供任何選項來插入排序),如您所見here

+0

我可以使用攔截器類來修改排序嗎? – Anurag

+0

是的,你可以,它是黑客行爲,但使用像Byteman這樣的工具可以讓你改變'FileMessageDispatcher.getFirstFile'的行爲,以便根據時間返回第一個。 –

+0

我已經找到了使用端點提供的OlderFirstComparator的地方,但它並沒有先返回舊文件? – Anurag

0

我找到了我的答案。這裏是代碼片段通過文件時間戳得到有序的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(); 
      } 
     }); 
相關問題