2017-02-20 27 views
0

我使用帶有hazelcast組件的駱駝,並在交換通過hazelcast seda時遇到交換標題的問題。發送到駱駝時丟失標題hazelcast seda endpoint

我需要從目錄輪詢文件併發送交換到seda hazelcast隊列(處理羣集中的交換)。

這是一個簡單的例子。 有兩條路線,它運行在其他JVM:

首先輪詢文件:

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

,二來處理這樣的:

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

當我試圖讀取頭像Exchange.FILE_NAME或其他人,我意識到他們是空的。

在通過hazelcast seda組件傳輸交換時是否可以保存標題?


編輯

當我設置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

謝謝,克勞斯。是的,我已經找到了這個選項,但我也許有一個愚蠢的問題。當我嘗試設置這個選項時,我有編組異常(參見上文)。希望這個選項不會強制駱駝傳輸所有文件數據到集羣隊列? – JuISe

+0

將消息轉換爲字符串或字節[],然後發送到hazelcast –

+0

它可以工作,但是當我將消息正文轉換爲字符串或字節[]時,意味着我將所有文件內容加載到內存。是否有可能發送文件引用hazelcast而不是發送所有文件內容? – JuISe