Получил дубликат сообщения в то время как Aggregate: mule esb

Столкнулся с проблемой при объединении нескольких файлов. Я храню два разных файла. И объединить эти два файла в один. Некоторое время я получил дубликат сообщения. Или когда-то один файл упал. Ниже мой поток

<flow name="CombineFiles" >
        <file:inbound-endpoint path="Custom" responseTimeout="10000" doc:name="File" moveToDirectory="BackUp"/>
        <file:file-to-string-transformer doc:name="File to String"/>
        <scripting:component doc:name="Groovy">
            <scripting:script engine="Groovy"><![CDATA[long now = new java.util.Date().getTime(); 
                long mod = now % 2000; 
                message.setCorrelationId(String.valueOf(now - mod));
                message.setCorrelationGroupSize(100);
                return message;
            ]]></scripting:script>
        </scripting:component> 

        <collection-aggregator  failOnTimeout="false" doc:name="Collection Aggregator" timeout="3000"/>
        <combine-collections-transformer doc:name="Combine Collections"/>
        <logger message="FINAL #[payload]" level="INFO" doc:name="Logger"/>
        <object-to-string-transformer doc:name="Object to String"/>
        <file:outbound-endpoint path="Result" outputPattern="result1" responseTimeout="10000" doc:name="File"/>

    </flow> 

Некоторое время я получил сообщение от file1 два раза. или какое-то время получал только 1 файловое сообщение. Я хочу объединить 2 файла. Что не так с моим потоком???


person user3855589    schedule 19.02.2015    source источник
comment
Почему вы устанавливаете размер группы корреляции равным 100, если хотите объединить 2 файла? Кроме того, я думаю, что идентификатор корреляции установлен неправильно, потому что он зависит только от времени прибытия файла. С уважением, Маркос.   -  person MarcosNC    schedule 19.02.2015
comment
Через 2 секунды количество файлов не приходит на основе того, что я установил идентификатор корреляции и размер. Но если я хочу интегрировать 2 файла, то как мне установить идентификатор корреляции ??   -  person user3855589    schedule 20.02.2015
comment
Если вы хотите объединить 2 файла, размер группы должен быть 2. Если это значение больше, агрегатор будет продолжать ждать после того, как эти 2 файла поступят, фактически тайм-аут агрегатора составляет 3 секунды, а ваш идентификатор корреляции изменяется на 2 секунды. . Тем не менее, я думаю, что мод отметок времени не является хорошим подходом, потому что файлы могут прибыть, когда двухсекундное окно закончилось.   -  person MarcosNC    schedule 20.02.2015


Ответы (1)


Сразу после <combine-collections-transformer/> поставить

 <set-payload value="#[message.payload[0]] #[message.payload[1]]" doc:name="Set Payload"/>

и проверьте, решена ли ваша проблема. Здесь я пытаюсь явно указать ваше сообщение от агрегатора коллекции ... Но, пожалуйста, не это может не сработать, если есть более 2 файлов ... но поскольку ваше требование - использовать здесь 2 файла в качестве входных данных ... это будет работать отлично

person Anirban Sen Chowdhary    schedule 19.02.2015
comment
Спасибо за ответ .. Это не срабатывало каждый раз, потому что ... Например: в файле 1 у меня есть контент, например, это файл 1, а во втором файле у меня есть контент, например, это файл 2 ... некоторое время я получил это Вывод Это файл 2 Это файл 2 Это файл 1 когда-то я получил Это файл 2 Это файл 1 аналогично... Если я УСТАНОВИЛ ПОЛЕЗНУЮ НАГРУЗКУ, то я получил Это файл 2 Это файл 2 Он мне не показал файл 1 содержимое.. - person user3855589; 20.02.2015
comment
Вы установили полезную нагрузку таким же образом, как я упомянул ?? как #[message.payload[0]] #[message.payload[1]] ? вам нужно поставить как message.payload[0] и message.payload[1] - person Anirban Sen Chowdhary; 20.02.2015