由于可能的内存爆发,我的 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) {
}
}
我有多个其他服务,他们将条目放入地图中。
如果您的版本是 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实例并创建一个新的实例。这会强制所有套接字在启动期间执行 init。Hazelcast是一个套接字应用程序,所以如果你遭受1/2开放的套接字,那么Hazelcast在恢复连接方面无能为力。
希望这有帮助,