-
Notifications
You must be signed in to change notification settings - Fork 73
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
服务优雅下线后,订阅通知不会触发 #104
Comments
一样的问题 有解决吗? 回退版本吗 |
目前通过屏蔽PushReceiver达到订阅的数据是准的 import PushReceiver from "nacos-naming/lib/naming/push_receiver"
PushReceiver.prototype._handlePushMessage = () => {} 不过有一个缺点 没法立即知道变化 只能通过他自己的http不间断查询 默认10s 所以最长可能得20s后才能知道服务下线了 |
一样的问题,所有hosts都下线了时,直接 触发了 host_reactor.js源码中的 processServiceJSON方法中的 if (!serviceInfo.isValid) {
return oldService;
}
get isValid() {
const valid = !!this.hosts;
// 如果 this.hosts 是空数组要返回 false
if (valid && Array.isArray(this.hosts)) {
return this.hosts.length > 0;
}
return valid;
} 看源码,作者应该是特意这么写的,但是不懂其中的缘由。 |
我看 isValid 使用的地方只有在 host_reactor.js 使用了, 我强行改成
|
看了 Java 和 Go 的代码,发现这里对于 hosts 为空的处理逻辑是一致的,会返回上次缓存的数据。 |
我现在也被这个问题坑在这,所有的服务都下线了,getAllInstances还能看到最后一个下线的服务。 |
我也是, 我现在就想监控服务运行状态, 才能感知到 |
当所有节点都优雅下线后,通知过来的hosts为空,进而nacos-naming/lib/naming/host_reactor.js中去解析消息时
processServiceJSON(json) { const data = JSON.parse(json); const serviceInfo = new ServiceInfo(data); const oldService = this._serviceInfoMap.get(serviceInfo.getKey()); if (!serviceInfo.isValid) { return oldService; } ...
isValid为false,导致不触发通知,建议可以触发一次事件,hosts为空,避免程序需要轮询来解决
The text was updated successfully, but these errors were encountered: