0

有没有办法设置缓存侦听器,以便侦听器在插入缓存条目的同一节点上运行。

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

4

1 回答 1

0

如果您在 GridGain 中订阅缓存事件侦听器,那么它将在事件发生的节点上准确执行。查看 Github 或 GridGain 发行版中的CacheEventsExample

以下是从 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.

我还建议在 GridGain 网站上观看分布式事件截屏视频

于 2014-05-22T02:01:46.747 回答