• 关闭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。

  • 相关阅读:
    【Idea】使用中的一些问题
    【Redis】Linux配置Redis(单点)
    【Zookeeper】Linux上安装zookeeper(单节点)
    【Echarts】设置主题、扇形格式化
    【JS】两个数组的交集、差集、并集、补集、去重
    【MySQL】 准确查询空值、ISNULL函数
    【健康】能量系统与训练应用和心肺耐力与运动表现
    【RabbitMQ】消息队列RabbitMQ与Spring集成
    【Java、Util】元和分的相互转换
    k8s入门系列之介绍篇
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8824965.html
Copyright © 2020-2023  润新知