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 没有收到任何事件,无论是启动还是关闭

知道我在这里缺少什么吗?

解决方法

你写的代码是正确的。您看不到日志的原因是您的 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