hazelcast - 客户端重新连接后 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 实例并创建一个新实例。这会强制所有套接字在启动期间执行初始化。Hazelcast 是一个套接字应用程序,因此如果您遇到 1/2 开放的套接字,那么 Hazelcast 在恢复连接方面无能为力。
希望这可以帮助,
推荐阅读
- android - 如何使用房间数据库在单个实体中的三个以上表中使用关系
- javascript - 如何使用 Jquery 在表上附加输入类型提交元素并绑定它?
- python - 由于使用了不正确的文件系统,shutil 的 make_archive 方法在 AWS Lambda 中失败
- javascript - 使用 html 字符串转换填充 html 中的数据
- c# - 从数据表中获取值并将其传递给标签
- machine-learning - 将文件从本地机器传输到虚拟机
- python - 尝试使用 Python 运行 C++ 代码时出现 FileNotFoundError
- bash - mix ecto.migrate 在 ssh 上运行时表现得很奇怪
- pine-script - 交易视图 pinescript 绘图问题
- python-3.x - 在 NUC 系统中发生崩溃事件后,其中一个脚本未在 crontab 中执行的原因