我使用骆驼与hazelcast组件和面临的问题与交换头,当交换通过hazelcast seda。
我需要轮询目录中的文件,并将交换发送到seda hazelcast队列(以处理集群中的交换)。
这种情况有一个简单的例子。有两个路由,在其他JVM中运行:
首先是轮询文件:
from("file:someFromFolder")
.to("hazelcast:seda:queue?hazelcastInstance=#hazelcast-instance");
第二个问题是:
from("hazelcast:seda:queue?hazelcastInstance=#hazelcast-instance")
.to("file:someToFolder");
当我试图阅读像Exchange这样的标题时。文件名
或其他,我意识到它们是空的。
通过hazelcast seda组件传输交换时,是否可以保存标头?
编辑
当我在producer routeendpoint上设置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
设置为endpoint上的一个选项。默认情况下,它只是被传输的消息体。您可以在文档中找到这些信息:http://camel.apache.org/hazelcast-component.html#HazelcastComponent-塞达
我有一条骆驼路线,如下所示。 bean方法顾名思义,分别将body设置为“Hello”和“World”。 我还设置了onException子句,如下所示: 假设,我将一条消息放在队列“开始”上,正文为“测试消息”。在第一个杜米豆中成功处理后,我在第二个杜米豆中抛出一个运行时异常。我希望看到实际的消息或(原始消息内容完好无损,即“测试消息”)被发送到我的死信队列。 但是,死信队列上的消息内容是“He
如何使用Apache Camel调用带有空消息体的SOAP Web服务? 例如,路由上的最后一个endpoint将是调用我的代理上采用 0 个参数的方法。 编辑: xml配置示例: 问题是 WS 上的方法“invoke”需要 0 个参数,并且会抛出一个异常,指出正在接收 1 个参数。有没有办法让我指定忽略此收到的输入?
我有一个Camel路由,在Karaf中运行,为此我添加了一个死信通道。这是为了处理路由失败的情况,我想保留问题消息并记录原因。我不能将异常抛回调用应用程序,因为我正在异步处理一些处理。 通过阅读文档和尝试大量案例,我不清楚如何将异常记录到Karaf的日志中,并将原始消息存放到死信队列中。 以下是我的摘录:- 如果我删除“onExcgon”结构,那么在所有异常情况下,源消息都会出现在死信队列中,但不
设置:默认ActiveMQ.XML。本地数据中心的3台服务器上的每台服务器一个ActiveMQ实例,远程数据中心服务器上的每个服务器一个Active MQ实例。所有3个1实例都在运行,但每个数据中心在任何给定时刻只有一个ActiveMQ实例是主实例。来自所有数据中心的所有实例的消息都将持久化到网络KahaDB,我们为每条消息配置了两次重试。 目标:保持数据中心之间的队列同步。 问题:要测试远程服务
我有一个简单的驼峰路由,它接受一个项目列表,将它们拆分,将每个元素发送到mq节点进行处理,然后通过聚合器将它们连接在一起。 非常接近合成消息处理器:http://camel.apache.org/composed-message-processor.html 但是我们注意到拆分后,camel会创建多个并发消费者?或者交换?因为消息被发送给多个消费者,他们永远不会完成。 列表:1,2,3,4 拆分: