客户端重新连接后,Hazelcast侦听器不起作用

时间:2020-02-06 09:44:13

标签: hazelcast hazelcast-imap

我的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) {

    }
}

我还有其他多项服务,他们将条目输入地图。

1 个答案:

答案 0 :(得分:0)

如果您的版本是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

为了恢复客户端侦听器,最好销毁hazelcastinstance并创建一个新实例。这将强制所有套接字在启动期间执行初始化。 Hazelcast是一种套接字应用程序,因此,如果您遇到1/2个开放式套接字的问题,那么Hazelcast不能做很多恢复连接的事情。

希望这会有所帮助,