2015-02-19 2 views
1

Облицовка проблемы при объединении нескольких файлов. Я храню два разных файла. И объедините эти два файла в один. Некоторое время я получил двойное сообщение. Или некоторое время один файл упал. Ниже мой потокПолучено дублирующееся сообщение While 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 файла. Что не так с моим потоком ???

+0

Почему вы устанавливаете размер группы корреляции до 100, если хотите объединить 2 файла? А также, я думаю, что идентификатор корреляции не очень хорошо установлен, потому что он зависит только от времени прибытия файла. С уважением, Маркос. – MarcosNC

+0

Через 2 секунды файлы no.of основаны на том, что я установил идентификатор корреляции и размер. Но если я хочу интегрировать 2 файла, то каким образом я должен установить идентификатор корреляции? – user3855589

+0

Если вы хотите объединить 2 файла, размер группы должен быть равен 2. Если это значение больше, агрегатор будет продолжать ждать после того, как эти 2 файла прибыли, на самом деле, тайм-аут агрегатора составляет 3 секунды, а ваш коэффициент корреляции id на 2 секунд. Тем не менее, я думаю, что timestamp mod не является хорошим подходом, потому что файлы могут появиться, когда закончится двухсекундное окно. – MarcosNC

ответ

0

Только после того, как <combine-collections-transformer/> поставил

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

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

+0

Спасибо за ответ .. Это не сработало каждый раз, потому что ... Например: В файле 1 у меня есть контент, такой как «Это файл 1», а во втором файле у меня есть контент типа «Это файл 2» ... некоторое время я получил этот вывод «Это файл 2 Это файл 2 Это файл 1» некоторое время, когда я получил «Это файл 2 Это файл 1» также ... Если я установил PAYLOAD, тогда я получил «Это файл 2 Это файл 2 «Он не показывал мне файл 1. – user3855589

+0

Вы поместили набор полезной нагрузки так же, как я упомянул? например '# [message.payload [0]] # [message.payload [1]]'? вам нужно указать 'message.payload [0]' и 'message.payload [1]' –

+0

Да, я сделал это как и сказал ... но некоторое время не работает – user3855589

Смежные вопросы