java - 防止 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 主题的新手,希望得到帮助或想法。
解决方案
对我来说,解决方案是设置标志 local=true 所以在集群中只有一个成员在其本地地图存储中保存该值。这仅触发了持有此值的特定成员上的 EvictionListener,这仅导致一个事件。
推荐阅读
- javascript - Tampermonkey 分享的最佳实践
- azure-maps - Azure 地图自动完成 - 仅限国家和城市
- 2sxc - 2SXC Adam 文件夹很大
- php - Laravel 8:为什么没有提交会话
- wordpress - 用于使用 HivePress 预订列表的 WordPress 插件?
- javascript - 我应该在脚本中的哪个位置放置 document.title 以每 xx 毫秒更改一次标题?
- android - 为发布/调试 arm/x86 aar 库定义自定义构建类型
- mysql - mysql IF 列 EXISTS THEN 从表中删除记录
- webpack - 使用 Webpack 5 for Next.js 配置文件加载器选项
- python - 使用while循环从函数获取输出以在其他地方使用(python)