基于亲和力的缓存侦听器

时间:2014-05-21 16:40:28

标签: gridgain

是否有办法设置缓存列表,以便列表器在插入缓存条目的同一节点上运行。

我想在网格上为每个put缓存条目在数据缓存中运行一些处理。为了提高性能,我想在条目所在的同一节点上运行此处理。什么是实现这一目标的最佳方式?

1 个答案:

答案 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.

我还建议您观看Distributed Events screencast on GridGain website