如何在骆驼路线内获取 Hazelcast 地图?

时间:2021-01-27 11:57:45

标签: java routes apache-camel hazelcast

我对 Camel(和 hazelcast)真的很陌生,最近我一直在玩它。一个看似简单的操作却给我带来了很多麻烦,我在任何地方都很难找到任何路标。

我有一个听众在观察榛子地图上的变化。如果所述更改符合某个标准,我想获取整个地图并将其发送到处理器。像这样:

from(hazelcast:map:someMap?hazelcastInstance=#hazelcastInstance)
.filter().method(SomeFilter.class, filterMethod)
.???
// If the filter cafeterias are met, get the entire map and send it to a processor

但我真的不知道如何获取整个地图本身,尤其是使用 Java DSL。我发现的最接近的事情是获取地图的 keySet,然后在其上调用 getAll(keySet),这对于如此简单的事情似乎是不必要的设计?如果这确实是首选方法,那么还有另一个问题 - 如何将所述 keySet 作为参数传递给 getAll 操作?即:

<snip>
.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_KEYS_OPERATION))
.to(hazelcast:map:someMap?hazelcastInstance=#hazelcastInstance) // Gets the keySet just fine.
.setHeader(HazelcastConstants.OPERATION, constants(HazelcastConstants.GET_ALL_OPERATION))
.????
// I've tried .setHeader(HazelcastConstants.OPERATION_PARAM, new 
// SimpleExpression("${body}")> here,
// amongst many other things, but, I just get an empty object back, so it's
// pretty clear I'm messing up 
// the format or parameter choice here.
.to(hazelcast:map:someMap?hazelcastInstance=#hazelcastInstance)

顺便说一下,这里使用camel 2.18.0。

1 个答案:

答案 0 :(得分:0)

经过更多的反复试验,我让它工作了。我发誓这是我第一次尝试的事情之一,但我一定是第一次尝试就搞砸了,然后被难住了。您真正要做的就是获取 keySet,然后放入 OBJECT_ID。所以是这样的:

.setHeader(HazelcastConstants.OPERATION, constant(HazelcastConstants.GET_KEYS_OPERATION))
.to(hazelcast:map:someMap?hazelcastInstance=#hazelcastInstance)
.setHeader(HazelcastConstants.OPERATION, constants(HazelcastConstants.GET_ALL_OPERATION))
.setHeader(HazelcastConstants.OBJECT_ID, new SimpleExpression("${body}"))
.to(hazelcast:map:someMap?hazelcastInstance=#hazelcastInstance)

(注意:在较新版本中它是 hazelcast-map。)

还有 ta-dah,你有一个 Hashmap 可以使用。替代方法似乎使用 QUERY,但我无法弄清楚查询的正确语法。我很想听听是否有人有一个带有 QUERY 标头的工作示例...