zoukankan      html  css  js  c++  java
  • 关闭provider进程或者consumer进程后,会发生什么?

    下图是 provider,consumer 和注册中心之间的拓扑图:

    provider,consumer 以及管理控制台都是 zookeeper 的客户端,所以都和 zk 建立了tcp连接。

    以接口 com.zhang.HelloService 为例:provider 启动时,会在 /dubbo/com.zhang.HelloService/providers 节点下建立一个临时节点,描述自己的信息。对应的,consumer 启动时,会在 /dubbo/com.zhang.HelloService/consumers 节点下建立一个临时节点,描述自己的信息。consumer 作为 zk 的客户端,它会读取 /dubbo/com.zhang.HelloService/providers 的数据,然后与 provider 建立tcp连接,并发起远程调用。consumer 同时也会 watch /dubbo/com.zhang.HelloService/providers 节点的子节点,/dubbo/com.zhang.HelloService/providers 子节点发生变化时,consumer 会收到 zk 的通知。而管理控制台,负责在 /dubbo/com.zhang.HelloService/configurators 节点下写override 参数,同样 consumer 也会 watch configurators 节点的变化。

    问题:如果 consumer 已调用过 provider 的服务,且双方处于正常连接状态,关闭 provider 或 consumer 分别会发生什么(假设 kill -9 pid)?

    1. 关闭 provider 进程,consumer 会感知到(因为2者之间有 tcp 连接),并且它会重试连接 provider,zk 也会感知到(因为 provider 是 zk 客户端),

    provider 和 zk 的会话关闭后,zk 会删除 /dubbo/com.zhang.HelloService/providers 下的瞬时节点,consumer 发现 provider 被删除后,不会再重连。

    2. 或者关闭 consumer 进程,provider 也会感知到,但是 provider 不会重连 consumer;当然 zk 也会知道,并且 zk 也会删除 /dubbo/com.zhang.HelloService/consumer 下的瞬时节点。

    3. 如果 provider 重新上线,zk 会发现,然后通知 consumer(因为consumer 有watch),consumer 重新连接 provider。

  • 相关阅读:
    Android应用程序执行流程
    Android的架构与Android应用程序启动流程
    Android开发环境使用工具Eclipse IDE工程目录结构
    MySQL 的 crash-safe 原理解析
    vivo 悟空活动中台
    图解 Promise 实现原理(三)—— Promise 原型方法实现
    领域驱动设计(DDD)实践之路(三):如何设计聚合
    深入浅出开源监控系统Prometheus(上)
    你还应该知道的哈希冲突解决策略
    反应式编程 RxJava 设计原理解析
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8824965.html
Copyright © 2011-2022 走看看