diwenzheng commented on issue #2571: URL: https://github.com/apache/servicecomb-java-chassis/issues/2571#issuecomment-917586281
> > > > 这里的watch 其实我一直没太搞懂 ,能方便说一下嘛. > > > > > > > > > 可以把问题范围缩小、实例化吗? > > > > > > 大致就是pull和watch的区别,以及各个的作用,目前我了解pull就是和注册中心的心跳,watch我没有用,yaml配置的是false,所以对watch的理解不是太到位,而且偶尔我看到心跳交互有异常,你在应用的时候有看过心跳错误的日志吗,方便说下你们的部署模式吗,稍微广一点哈. > > 我个人觉得你认为的pull是心跳理解有不太恰当, 服务和远端的注册中心的心跳是通过HeartbeatTask来维持的; > > 至于pull和watch需要说明一下调用模型: 服务在运行过程中会与其他服务产生调用关系,基于一个假设:服务consumer如果在 > 运行过程中调用过服务provider,则在后续运行过程中也会存在调用,为了下次调用能直接命中provider的有效实例,java-chassis在调用远端的注册中心实例发现接口时,会隐式的创建一下consumer到provider的依赖关系, 后续服务provider实例的任何变更会通过websocket推送的java-chassis,表现到的接口行为就是watch。 > > 简单来说,就是服务调用产生依赖关系,依赖关系的provider服务变化后通知consumer,consumer就可以更新本地的实例缓存了。servicecomb社区的chassis(go-chassis、java-chassis)提供了更新本地实例缓存的机制:pull和watch, pull是轮询的逻辑,定期拉取实例,watch则是远端注册中心主动推送(java-chassis当前只是把这种推送当做是一个信号,会忽略推送中的信息,收到信号后主动去pull一次数据)。 > > 总结一下,pull是客户端轮询行为, watch是注册中心主动推送变化的行为,两者都是解决本地缓存的刷新,加上watch后时效性会较好。 非常感谢你的分享.我说的比较片面,哈哈.之前我一直很困扰服务应用内部频发报心跳的问题.服务不停打印那些心跳超时的日志.看到你的issue才让我去仔细去看了pull,watch的问题.另外官方文档中说.watch事件走websocket,watch事件是观察服务中心实例信息有没有变更。我现在刚更改了使用watch模式,随后我在观察服务会不会在报心跳的问题. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected]
