У меня есть требование, когда мне нужно сначала обработать самый старый файл с помощью запрашивающего мула. В свойстве Inbound от запрашивающего мула мы получаем отметку времени. Оттуда мы можем получить время файла. Но как его обработать?
Есть ли способ получить самый старый файл с помощью Mule Requester?
Ответы (2)
Для этого вам понадобится пользовательский компонент, потому что нет возможности сделать это из коробки (по крайней мере, до Mule 3.7.2).
Действительно, FileMessageRequester
вызывает FileMessageDispatcher.getNextFile
для получения следующего файла для обработки в опрашиваемом каталоге. Этот метод основан на частном методе выбора первого файла для обработки, методе, который не выполняет никакого упорядочения (и не предлагает никаких вариантов для внедрения упорядочения), как вы можете видеть здесь.
person
David Dossot
schedule
08.10.2015
Могу ли я использовать класс перехватчика для изменения последовательности?
- person Anurag; 09.10.2015
Да, вы могли бы, это хакерство, но использование такого инструмента, как Byteman, позволит вам изменить поведение
FileMessageDispatcher.getFirstFile
, чтобы вернуть первое в зависимости от времени.
- person David Dossot; 09.10.2015
Я нашел где-то использовать OlderFirstComparator, предоставленный в конечной точке. Но он сначала не возвращает старый файл?
- person Anurag; 12.10.2015
Я нахожу свой ответ. Вот фрагмент кода, чтобы получить упорядоченное сообщение мула по отметке времени файла.
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();
}
});
person
Anurag
schedule
14.10.2015