使用Hazelcast将单个节点转换为分布式java应用程序
我们有一个使用Vert.x构建的当前java应用程序,它使用简单的本地使用Hazelcast将单个节点转换为分布式java应用程序,java,hazelcast,vert.x,hazelcast-jet,Java,Hazelcast,Vert.x,Hazelcast Jet,我们有一个使用Vert.x构建的当前java应用程序,它使用简单的本地HashMaps。为了将我们的应用程序分发到多个节点上,我们希望用一个HazelcastIMap替换本地hashmap 基本上我们有2个HashMaps: Map<String, Group> // <groupId - group> Map<String, Set<String> // <memberId - set of groupIds> 我们应该能够做到: Co
HashMaps
。为了将我们的应用程序分发到多个节点上,我们希望用一个HazelcastIMap
替换本地hashmap
基本上我们有2个HashMaps:
Map<String, Group> // <groupId - group>
Map<String, Set<String> // <memberId - set of groupIds>
我们应该能够做到:
Collection<Group> groups = imap.values(Predicates.in("members", varargs of member ids))
非常感谢
对
如果原始地图不包含重复项,且IMap未同时更新,则不应包含重复项
这取决于您的用例,我不能概括地说
这不好,因为imap.values
调用被阻塞,并且flatMap
中的函数不能被阻塞。我所说的阻塞是指阻塞IO操作。此外,您无法从局部变量捕获imap
实例,因为它不可序列化,Jet无法将其发送给成员。但是您可以像这样使用mapUsingService
和servicefactures.imapService
:
.mapUsingService(
ServiceFactorys.iMapService(“我的地图”).toNonCooperative(),
(imap,成员ID)->
值(谓词.in(“memberId”,memberId.toArray(新字符串[0]))
对
如果原始地图不包含重复项,且IMap未同时更新,则不应包含重复项
这取决于您的用例,我不能概括地说
这不好,因为imap.values
调用被阻塞,并且flatMap
中的函数不能被阻塞。我所说的阻塞是指阻塞IO操作。此外,您无法从局部变量捕获imap
实例,因为它不可序列化,Jet无法将其发送给成员。但是您可以像这样使用mapUsingService
和servicefactures.imapService
:
.mapUsingService(
ServiceFactorys.iMapService(“我的地图”).toNonCooperative(),
(imap,成员ID)->
值(谓词.in(“memberId”,memberId.toArray(新字符串[0]))
Collection<Group> groups = imap.values(Predicates.in("members", varargs of member ids))
StreamStage.flatMap(memberIds -> Traversers.traverseIterable(imap.values(Predicates.in("memberIds", memberIds.toArray(new String[0])))