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。

  • 相关阅读:
    WCF+Silverlight 制作一个简单RSS的阅读器(一)
    将Ironpython嵌入到你的程序中
    今天修改了网页
    开发小议
    Silverlight 可以支持windows2000了
    昨天晚上开始寻找圣诞的素材了
    需要每天的坚持!
    今天开始学习ADO.NET中的Connection对象(一)SqlConnection对象连接SQL Server
    一个基于Ajax简单的数据验证
    《微软:DirectShow开发指南》第4章 Capturing Audio with DirectShow
  • 原文地址:https://www.cnblogs.com/allenwas3/p/8824965.html
Copyright © 2011-2022 走看看