首页 > 解决方案 > Hazelcast LifecycleListener stateChanged 从不触发

问题描述

我想跟踪 Hazelcast 的生命周期。默认日志记录带有事件 lke

INFO: [192.168.201.11]:5701 [MyApp] [4.1.2] [192.168.201.11]:5701 is STARTING

INFO: [192.168.201.11]:5701 [MyApp] [4.1.2] [192.168.201.11]:5701 is STARTED

所以我希望这些事件告诉我状态是 STARTING 或 STARTED 等。

这是我的启动方式

var hzConfig = new Config();
hzConfig.setClusterName(clusterName);
hzConfig.setInstanceName(memberId);
instance = Hazelcast.newHazelcastInstance(hzConfig)
var lifecycleListener = new LifecycleListener();
lifecycleListenerId = instance.getLifecycleService().addLifecycleListener(lifecycleListener);

这是我的 LifecycleListener

public class LifecycleListener implements com.hazelcast.core.LifecycleListener {

    @Override
    public void stateChanged(LifecycleEvent lifecycleEvent) {
        System.out.println("Lifecycle change: " + lifecycleEvent.getState());
    }
}

一切都非常基本,但我的 LifeCycleListener 没有收到任何事件,无论是在启动时,还是在关闭时。

有什么想法我在这里想念的吗?

标签: event-handlinghazelcastlifecycle

解决方案


你写的代码是正确的。您看不到日志的原因是您的 Hazelcast 实例在添加 LifecycleListener 之前启动。

试试下面的代码。

var hzConfig = new Config();
hzConfig.setClusterName(clusterName);
hzConfig.setInstanceName(memberId);
instance = Hazelcast.newHazelcastInstance(hzConfig)
var lifecycleListener = new LifecycleListener();
lifecycleListenerId = instance.getLifecycleService().addLifecycleListener(lifecycleListener);

Thread.sleep(5000);
instance.shutdown();
Thread.sleep(5000);

您应该看到以下日志。

Lifecycle change: SHUTTING_DOWN
...
Lifecycle change: SHUTDOWN

推荐阅读