waibozie commented on issue #2571: URL: https://github.com/apache/servicecomb-java-chassis/issues/2571#issuecomment-917574129
> > > 这里的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后时效性会较好。 -- 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]
