首页 > 解决方案 > 防止 hazelcast 在每个节点上注册 EvictionListener

问题描述

我们目前有一个问题,我们在 Hazelcast Config Bean 中为特定地图配置地图条目侦听器。我们遇到的问题是,侦听器在每个节点上都被实例化,这对我们的实现是有意义的并且是正确的,但实际上这不是我们试图实现的。有没有办法只为一个集群节点或集群本身在地图上添加一个侦听器,这样当条目被驱逐时,只有一个侦听器注册到地图?

需要明确的是:有 12 台服务器运行我们的 spring boot 应用程序,它们都注册为 hazelcast 集群中的节点。因此,如果一个条目被驱逐,则有 12 个侦听器会对驱逐做出反应。我们只想为这种情况注册一个监听器。

这是 Config Bean 的代码,它在我们的服务器集群中的每个应用程序中运行,这些应用程序都是节点:

@Bean
Config hazelcastConfig(AppConfigurationProperties properties, 
HazelcastEvictionListener hazelcastEvictionListener) {

HazelcastProperties hazelcastProperties = properties.getHazelcast();
    Config config = new Config();

    MapConfig activationMapConfig = new MapConfig();
    activationMapConfig.setName(HazelcastMaps.ACTIVATION_INFORMATION);
    activationMapConfig.addEntryListenerConfig(new 
EntryListenerConfig(hazelcastEvictionListener, false, true));
...}

有没有办法配置 hazelcast,所以这个 EntryListener 只在所有节点上注册一次?

我实际上不知道以这种方式使用 hazelcast 是否有意义,但我是 Hazelcast 主题的新手,希望得到帮助或想法。

标签: javaspring-bootlistenerhazelcasthazelcast-imap

解决方案


对我来说,解决方案是设置标志 local=true 所以在集群中只有一个成员在其本地地图存储中保存该值。这仅触发了持有此值的特定成员上的 EvictionListener,这仅导致一个事件。


推荐阅读