-
Notifications
You must be signed in to change notification settings - Fork 8.2k
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
Refactor NacosWatch Class #2868
Comments
|
第1件事情,可以考虑移除,30秒更新一次元数据,意义不太大 |
第二点主要在服务实例过多的时候会引发以下问题 #1967 |
所以,不要去拉实例列表,只拉服务列表即可 |
NacosReactiveDiscoveryClient 获取实例列表逻辑
NacosReactiveDiscoveryClient 拉取实例有用缓存 , 不会每次都远程拉 , 不过HeartbeatEvent会一直触发(默认30秒发一次 , 基于NacosWatch 的delay值) , 导致 DiscoveryClientRouteDefinitionLocator 不停的在刷新路由 Gateway 创建路由逻辑 ( DiscoveryClientRouteDefinitionLocator )
|
几个建议
|
我觉得拆分为2个bean来分别进行处理比较合适,定时发送Heartbeat事件的bean通过 |
@@i will solve it@@ |
赞成 |
* Refactor NacosWatch (#2868) * GatewayHeartBeatPublisher support zuul * Add GatewayHeartBeatPublisher tests * Update readme doc * Fix nacosWatch property hint
这样还是有问题。分两个bean的思路没问题,但是Heartbeat事件不仅gateway的locator会用到,spring boot admin也是通过订阅该事件去更新服务状态的,能否考虑将控制Heartbeat事件的开关名称换一个?#3258 |
这样还是有问题。分两个bean的思路没问题,但是Heartbeat事件不仅gateway的locator会用到,spring boot admin也是通过订阅该事件去更新服务状态的,能否考虑将控制Heartbeat事件的开关名称换一个? |
@zhangbinhub 可以考虑使用多条件,满足其一就装配。例如引入 |
@ruansheng8 帮看看这个pr的思路如何?#3303 |
Refer #3308 |
com.alibaba.cloud.nacos.discovery.NacosWatch
类目前的核心逻辑如下:它目前做了2件事:
namingService.subscribe()
到Nacos中订阅自身实例变化情况,当有变化时会将本地的metadata信息更新为Nacos Server中实例对应metadata信息。this.taskScheduler.scheduleWithFixedDelay()
启动一个定时任务定时发送特定的事件,然后其他的网关比如,Spring Cloud Gateway监听到对应的事件后,到Nacos中拉取相关的服务列表信息更新本地路由列表,达到动态路由效果,部分用户也有这样来使用网关达到动态路由效果的。其中,第1个效果经过社区周会讨论,应用场景不清晰,反而造成应用启动时订阅自己造成部分用户使用出现报错现象,因此考虑删除。
第2个效果经过社区内外同学讨论,其实并不是动态路由的最佳使用方式,网关路由信息是一份相关稳定的数据,每30s发送事件到注册中心拉取服务列表转换成默认路由,会造成网关的资源被大量消耗,特别是服务量大时,所以也不建议大家这样来用。
综上,社区考虑重构相关类,目前考虑将NacosWatch作为默认关闭的一个功能。欢迎大家对这个问题进行留言:)
The text was updated successfully, but these errors were encountered: