2017-02-20 33 views
0

Я использую верблюда с компонентом из лесного камня и столкнулся с проблемой с обменными заголовками, когда обмен проходит через серию кариесов.Потерять заголовки при отправке на верблюд hazelcast seda конечная точка

Мне нужно опросить файлы из каталога и отправить обмены в очередь seda hazelcast (для обработки обменов в кластере).

Простой пример такой ситуации. Есть два пути, который проходит в других виртуальных машинах:

Сначала для опроса файлов:

from("file:someFromFolder") 
     .to("hazelcast:seda:queue?hazelcastInstance=#hazelcast-instance"); 

И второй к обработке этого:

from("hazelcast:seda:queue?hazelcastInstance=#hazelcast-instance") 
     .to("file:someToFolder"); 

Когда я пытался читать заголовки, как Exchange.FILE_NAME или другие, я понял, что они пусты.

Можно ли сохранить заголовки при передаче обменов через компонент серины кариеса?


EDIT

Когда я установил transferExchange=true в качестве опции на производителя маршрута конечной точки, я ловлю исключение:

Stacktrace 
--------------------------------------------------------------------------------------------------------------------------------------- 
org.apache.camel.RuntimeExchangeException: Message body of type org.apache.camel.component.file.GenericFile is not supported by this marshaller. on the exchange: Exchange[ID-DF-240815-MS12-60568-1487853045890-0-12][file.txt] 
       at org.apache.camel.impl.DefaultExchangeHolder.marshal(DefaultExchangeHolder.java:99) 
       at org.apache.camel.impl.DefaultExchangeHolder.marshal(DefaultExchangeHolder.java:83) 
       at org.apache.camel.component.hazelcast.seda.HazelcastSedaProducer.checkAndStore(HazelcastSedaProducer.java:55) 
       at org.apache.camel.component.hazelcast.seda.HazelcastSedaProducer.process(HazelcastSedaProducer.java:42) 
       at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:141) 
       at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) 
       at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460) 
       at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
       at org.apache.camel.processor.Pipeline.process(Pipeline.java:121) 
       at org.apache.camel.processor.Pipeline.process(Pipeline.java:83) 
       at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190) 
       at org.apache.camel.component.file.GenericFileConsumer.processExchange(GenericFileConsumer.java:442) 
       at org.apache.camel.component.file.GenericFileConsumer.processBatch(GenericFileConsumer.java:214) 
       at org.apache.camel.component.file.GenericFileConsumer.poll(GenericFileConsumer.java:178) 
       at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174) 
       at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101) 
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) 
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) 
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) 
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
       at java.lang.Thread.run(Thread.java:745) 

Так могло быть маршаллер пытаться сериализовать все данные файла?

+0

Вы пытались установить их в качестве свойств обмена? Хотя я не уверен, что это работает в JVM. –

+0

Да, результат такой же. Свойства потеряны. – JuISe

ответ

0

Вам необходимо установить transferExchange=true в качестве опции на конечной точке. По умолчанию передается только тело сообщения. Вы можете найти эту информацию в документации: http://camel.apache.org/hazelcast-component.html#HazelcastComponent-seda

+0

Спасибо, Клаус. Да, я нашел этот вариант, но у меня может быть глупый вопрос. Когда я пытаюсь установить этот параметр, у меня есть исключение marshaller (см. Выше). Надежда, этот параметр не заставляет верблюда переносить все данные файла в очередь кластера? – JuISe

+0

Преобразование сообщения в строку или байт [] сначала перед отправкой в ​​hazelcast –

+0

Это работает, но когда я конвертирую тело сообщения в String или byte [], это означает, что я загружаю весь файл в память. Можно ли отправить ссылку на файл для газелирования вместо отправки всего содержимого файла? – JuISe