客户端重新连接后,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) {
}
}

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

如果您的版本是 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在恢复连接方面无能为力。

希望这有帮助,

最新更新