首页 > 解决方案 > 客户端重新连接后 Hazelcast 侦听器不起作用

问题描述

由于可能的内存爆发,我的 hazelcast 客户端断开了连接。客户端重新连接后,它不会从地图和主题上的侦听器获取消息。有没有办法让客户端再次对听众活跃?

这就是我在客户端/服务中启动侦听器的方式:

IMap liveMap = hazelcastCacheClientService.getMap("MYMAP");
MyListener myMapListener = new MyListener();
liveMap.addEntryListener(myMapListener,true);

这就是我的听众的样子:

public class MyListener implements EntryListener {

    @Override
    public void entryAdded(EntryEvent entryEvent) {
         //do something
    }

    @Override
    public void entryEvicted(EntryEvent entryEvent) {

    }

    @Override
    public void entryRemoved(EntryEvent entryEvent) {

    }

    @Override
    public void entryUpdated(EntryEvent entryEvent) {
        //do something
    }

    @Override
    public void mapCleared(MapEvent mapEvent) {

    }

    @Override
    public void mapEvicted(MapEvent mapEvent) {

    }
}

我有多个其他服务,他们将条目放入地图。

标签: hazelcasthazelcast-imap

解决方案


如果您的版本是 3.9 或更早版本,则可能是错误。我们在 3.10 中改进了客户端重新连接逻辑,并在 3.11 中进一步改进了它。以下是客户端重新连接配置的 3.11 文档:https ://docs.hazelcast.org/docs/3.11/manual/html-single/index.html#configuring-client-connection-retry

话虽如此,我总是推荐一种额外的断路器模式,例如来自 netflix 的那种:https ://github.com/Netflix/Hystrix/wiki/How-it-Works

为了恢复客户端侦听器,最好销毁 hazelcast 实例并创建一个新实例。这会强制所有套接字在启动期间执行初始化。Hazelcast 是一个套接字应用程序,因此如果您遇到 1/2 开放的套接字,那么 Hazelcast 在恢复连接方面无能为力。

希望这可以帮助,


推荐阅读