是否有办法设置缓存列表,以便列表器在插入缓存条目的同一节点上运行。
我想在网格上为每个put
缓存条目在数据缓存中运行一些处理。为了提高性能,我想在条目所在的同一节点上运行此处理。什么是实现这一目标的最佳方式?
答案 0 :(得分:0)
如果您在GridGain中订阅了一个缓存事件监听器,那么它将在事件发生的节点上完全执行。看一下Github上的CacheEventsExample或GridGain发行版。
以下是从CacheEventsExaple获取的代码,它为特定的缓存事件订阅可选的本地和远程侦听器:
GridFuture<UUID> fut = g.forCache(CACHE_NAME).events().remoteListen(locLsnr, rmtLsnr,
EVT_CACHE_OBJECT_PUT, EVT_CACHE_OBJECT_READ, EVT_CACHE_OBJECT_REMOVED);
// Wait until event listeners are subscribed on all nodes.
fut.get();
请注意,要使事件通知起作用,必须在配置中启用它们,无论是从代码还是在XML配置文件中。这是XML片段:
<property name="includeEventTypes">
<util:constant static-field="org.gridgain.grid.events.GridEventType.EVTS_CACHE"/>
</property>
要忽略备份节点上的事件,您可以在远程侦听器中使用此逻辑
GridNode node = cache.affinity.mapPartitionToNode(event.partition());
// If we are on primary node.
if (node.isLocal())
// Process event.