Dubbo服务注册和发现

Dubbo的服务发现:先到注册中心寻找服务的List,选中一个,然后和被调用方建立NIO连接,传输数据包,进行方法调用
    利用心跳去检测注册的服务是否存活;
  在Spring启动后会利用DubboNamespaceHandler解析配置文件中的Bean,生成ServiceBean和ReferenceBean,
  ServiceBean进行服务暴露(自己跟到了):
  ReferenceBean则进行服务的自我发现,
  具体过程
  从建立spring到netty client建立连接的调用栈:
    NettyClient.doOpen() line: 66
    NettyClient(AbstractClient).(URL, ChannelHandler) line: 94
    NettyClient.(URL, ChannelHandler) line: 61
    NettyTransporter.connect(URL, ChannelHandler) line: 37
    Transporter$Adpative.connect(URL, ChannelHandler) line: not available
    Transporters.connect(URL, ChannelHandler...) line: 67
    HeaderExchanger.connect(URL, ExchangeHandler) line: 37
    Exchangers.connect(URL, ExchangeHandler) line: 102
    DubboProtocol.initClient(URL) line: 378
    DubboProtocol.getSharedClient(URL) line: 344
    DubboProtocol.getClients(URL) line: 321
    DubboProtocol.refer(Class, URL) line: 303
    ProtocolListenerWrapper.refer(Class, URL) line: 65
    ProtocolFilterWrapper.refer(Class, URL) line: 62
    Protocol$Adpative.refer(Class, URL) line: not available
    RegistryDirectory.toInvokers(List) line: 405
    RegistryDirectory.refreshInvoker(List) line: 228
    RegistryDirectory.notify(List) line: 196
    ZookeeperRegistry(AbstractRegistry).notify(URL, NotifyListener, List) line: 449
    ZookeeperRegistry(FailbackRegistry).doNotify(URL, NotifyListener, List) line: 273
    ZookeeperRegistry(FailbackRegistry).notify(URL, NotifyListener, List) line: 259
    ZookeeperRegistry.doSubscribe(URL, NotifyListener) line: 170
    ZookeeperRegistry(FailbackRegistry).subscribe(URL, NotifyListener) line: 189
    RegistryDirectory.subscribe(URL) line: 134
    RegistryProtocol.doRefer(Cluster, Registry, Class, URL) line: 271
    RegistryProtocol.refer(Class, URL) line: 254
    ProtocolListenerWrapper.refer(Class, URL) line: 63
    ProtocolFilterWrapper.refer(Class, URL) line: 60
    Protocol$Adpative.refer(Class, URL) line: not available
    ReferenceBean(ReferenceConfig).createProxy() line: 394
    ReferenceBean(ReferenceConfig).init() line: 303
    ReferenceBean(ReferenceConfig).get() line: 138
    ReferenceBean.getObject() line: 65
    DefaultListableBeanFactory(FactoryBeanRegistrySupport).doGetObjectFromFactoryBean(FactoryBean, String, boolean) line: 142

    整体来说: 先由注册中心的协议处理器处理注册中心的地址,找到所有provider的地址,创建所有invoker,然后再由invoker在真正调用时发起调用。
    注册中心的这个也抽象一种协议,由注册中心结合提供者的协议推导出提供者的协议地址,也就是目标端的地址与端口得知了。
    每一个接口在zookeeper上都有节点,节点下面是provider,再下面是所有provider的具体地址。

Dubbo的一个接口有多种实现的时候 使用group  版本更替使用version

Dubbo支持 RMI  Dubbo hessain webservice http 
dubbo 和rmi基于TCP 
Hessian 和webservice 基于Http
TCP和HTTP的区别:
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,没有端口的概念     
HTTP是应用层协议,主要解决如何包装数据
UDP:和TCP类似 有端口的概念

序列化:hessian2 dubbo json kryo等

你可能感兴趣的:(个人)