【发布时间】:2014-01-07 10:34:47
【问题描述】:
我有一个 apache 骆驼路由,它正在交换体上处理 POJO。
请查看从 1 到 3 标记的行的顺序。
from("direct:foo")
.to("direct:doSomething") // 1 (POJO on the exchange body)
.to("direct:storeInHazelcast") // 2 (destroys my pojo! it gets -1)
.to("direct:doSomethingElse") // 3 (Where is my POJO??)
;
现在我需要在hazelcast 组件上使用put 操作,不幸的是它需要将主体设置为值-1。
from("direct:storeInHazelcast")
.setBody(constant(-1))
.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.PUT_OPERATION))
.setHeader(HazelcastConstants.OBJECT_ID, constant(LAST_FLIGHT_UPDATE_SEQ))
.to("hazelcast:map:MyNumber")
;
对于标记为 2 的行,我想将交换的副本发送到 storeInHazelcast 路由。
首先,我尝试了.multicast(),但交换体仍然搞砸了(到-1)。
// shouldnt this copy the exchange?
.multicast().to("direct:storeInHazelcast").end()
然后我尝试了.wireTap(),它作为“即发即弃”(异步)模式工作,但我实际上需要它来阻止,并等待它完成。可以做wireTap拦截吗?
// this works but I need it to be sync processing (not async)
.wireTap("direct:storeInHazelcast").end()
所以我在这里寻找一些提示。据我所知,multicast() 应该复制了交换,但我的 storeInHazelcast 路由中的 setBody() 看起来搞砸了原始交换。
或者,也许还有其他方法可以做到这一点。
提前致谢。 骆驼2.10
【问题讨论】:
-
多播做浅拷贝,这反过来也反映在其他多播路由中。
标签: java apache-camel hazelcast jbossfuse