Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache camel 发送到camel hazelcast seda端点时丢失标头_Apache Camel_Hazelcast - Fatal编程技术网

Apache camel 发送到camel hazelcast seda端点时丢失标头

Apache camel 发送到camel hazelcast seda端点时丢失标头,apache-camel,hazelcast,Apache Camel,Hazelcast,我将camel与hazelcast组件一起使用,并在exchange通过hazelcast seda时遇到了exchange头的问题 我需要轮询目录中的文件,并将交换发送到seda hazelcast队列(以处理集群中的交换) 这种情况有一个简单的例子。 有两条路由在其他JVM中运行: 首先,对于轮询文件: from("file:someFromFolder") .to("hazelcast:seda:queue?hazelcastInstance=#hazelcast-inst

我将camel与hazelcast组件一起使用,并在exchange通过hazelcast seda时遇到了exchange头的问题

我需要轮询目录中的文件,并将交换发送到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\u 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)

那么,是marshaller尝试序列化所有文件数据吗?

您需要将
transferExchange=true
设置为端点上的一个选项。默认情况下,它只是传输的消息正文。您可以在文档中找到此信息:

您需要将
transferExchange=true
设置为端点上的一个选项。默认情况下,它只是传输的消息正文。您可以在文档中找到此信息:

是否尝试将它们设置为exchange属性?虽然我不确定这在JVM中是否有效。是的,结果是一样的。属性丢失。是否尝试将其设置为exchange属性?虽然我不确定这在JVM中是否有效。是的,结果是一样的。财产丢失了,谢谢,克劳斯。是的,我找到了这个选择,但我可能有一个愚蠢的问题。当我尝试设置此选项时,我遇到了marshaller异常(请参见上文)。希望,此选项不会强制骆驼将所有文件数据传输到群集队列?首先将消息转换为字符串或字节[],然后再发送到Hazelcast。它可以工作,但当我将消息正文转换为字符串或字节[]时,意味着我将所有文件内容加载到内存中。是否可以向hazelcast发送文件引用,而不是发送所有文件内容?然后将正文转换为文件名(例如您的文件引用)。谢谢,克劳斯。是的,我找到了这个选择,但我可能有一个愚蠢的问题。当我尝试设置此选项时,我遇到了marshaller异常(请参见上文)。希望,此选项不会强制骆驼将所有文件数据传输到群集队列?首先将消息转换为字符串或字节[],然后再发送到Hazelcast。它可以工作,但当我将消息正文转换为字符串或字节[]时,意味着我将所有文件内容加载到内存中。是否可以向hazelcast发送文件引用,而不是发送所有文件内容?然后将正文转换为文件名(例如,您的文件引用)