我正在评估Hazelcast作为我正在开发的应用程序的分布式数据网格解决方案.Hazelcast是在分布式集群上设置的,我的应用程序使用Spring以这种方式定义Hazelcast客户端:
<hz:client id="hazelcastClient" group-name="dev" group-password="dev-pass">
<hz:member>localhost:5701</hz:member>
</hz:client>
Run Code Online (Sandbox Code Playgroud)
在我的Hazelcast节点上,在hazelcast.xml文件中我设置了一个地图,其中包含所有需要的配置.假设这个地图被调用myMap.使用Hazelcast webapp进行监控(mancenter)时,我可以正确设置此地图.
我现在要配置地图以在应用程序端注入我的bean.如果我做的事情
<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" />
Run Code Online (Sandbox Code Playgroud)
我将这个映射注入到包含读取逻辑的bean中,我没有遇到任何问题.
但是,我还编写了一个实现MapLoader接口的类,以便处理缓存中丢失的数据.我现在的问题是我不知道如何将Maploader其与我定义的缓存联系起来.如果我尝试类似的东西
<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap">
<hz:map-store enabled="true" implementation="myMapLoader"/>
</hz:map>
Run Code Online (Sandbox Code Playgroud)
我发现了一个XML解析错误,因为它似乎是,当hz:map作为一个顶级元素(而不是内部的hz:config,例如),你不能指定内部元素.这让我觉得你需要定义一个hz:config元素.但是,如果您可以hz:config为客户定义元素,那么从文档中就不是很清楚了.对我来说,hz:config如果您希望您的应用程序成为群集的一部分,您似乎需要使用.然而,我不确定我的应用程序应该是群集的一部分在逻辑上是否正确 - 它基本上是数据网格的客户端.
您对如何配置我的应用程序以实现我想要的行为有任何想法吗?
谢谢!
mdo*_*gan 13
您无法在客户端配置地图.您应该在Hazelcast节点上配置myMap它MapLoader/MapStore.MapStore/MapLoader操作由拥有数据的Hazelcast节点执行,而不是由客户端执行.
Hazelcast节点
<hz:config>
...
<hz:map name="myMap" backup-count="1" max-size="0">
<hz:map-store enabled="true" implementation="myMapLoader" />
</hz:map>
...
</hz:config>
Run Code Online (Sandbox Code Playgroud)
- 或者 - 使用hazelcast.xml
<map name="myMap">
<backup-count>1</backup-count>
<time-to-live-seconds>0</time-to-live-seconds>
<max-idle-seconds>0</max-idle-seconds>
<map-store enabled="true">
<class-name>foo.bar.MyMapLoader</class-name>
<write-delay-seconds>0</write-delay-seconds>
</map-store>
</map>
Run Code Online (Sandbox Code Playgroud)
在客户端只是实例化myMap;
<hz:map id="myMap" instance-ref="hazelcastClient" name="myMap" />
Run Code Online (Sandbox Code Playgroud)
当客户端放入/获取该映射时,该节点处理客户端的请求将调用MapLoader/MapStore.
| 归档时间: |
|
| 查看次数: |
4751 次 |
| 最近记录: |