Есть ли способ получить самый старый файл с помощью Mule Requester?

У меня есть требование, когда мне нужно сначала обработать самый старый файл с помощью запрашивающего мула. В свойстве Inbound от запрашивающего мула мы получаем отметку времени. Оттуда мы можем получить время файла. Но как его обработать?


person Anurag    schedule 08.10.2015    source источник


Ответы (2)


Для этого вам понадобится пользовательский компонент, потому что нет возможности сделать это из коробки (по крайней мере, до Mule 3.7.2).

Действительно, FileMessageRequester вызывает FileMessageDispatcher.getNextFile для получения следующего файла для обработки в опрашиваемом каталоге. Этот метод основан на частном методе выбора первого файла для обработки, методе, который не выполняет никакого упорядочения (и не предлагает никаких вариантов для внедрения упорядочения), как вы можете видеть здесь.

person David Dossot    schedule 08.10.2015
comment
Могу ли я использовать класс перехватчика для изменения последовательности? - person Anurag; 09.10.2015
comment
Да, вы могли бы, это хакерство, но использование такого инструмента, как Byteman, позволит вам изменить поведение FileMessageDispatcher.getFirstFile, чтобы вернуть первое в зависимости от времени. - person David Dossot; 09.10.2015
comment
Я нашел где-то использовать 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