我的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) {
}
}
我还有其他多项服务,他们将条目输入地图。
答案 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不能做很多恢复连接的事情。
希望这会有所帮助,