济南UI培训
达内济南趵突泉中心

17156168575

热门课程

Java开发Dubbo的使用原理

  • 时间:2017-12-11
  • 发布:济南UI培训
  • 来源:互联网

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)

    Dubbo是什么?济南UI培训来告诉你

    Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色.

    Dubbo能做什么?

    透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入.

    软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点.
济南UI培训
    服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者.

    Dubbo框架结构.png

    节点角色说明:

    · Provider: 暴露服务的服务提供方.

    · Consumer: 调用远程服务的服务消费方.

    · Registry: 服务注册与发现的注册中心.

    · Monitor: 统计服务的调用次调和调用时间的监控中心.

    · Container: 服务运行容器.

    调用关系说明:

    服务容器负责启动,加载,运行服务提供者.

    服务提供者在启动时,向注册中心注册自己提供的服务.

    服务消费者在启动时,向注册中心订阅自己所需的服务.

    注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者.

    服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用.

    服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心.

    Dubbo提供了很多协议,Dubbo协议、RMI协议、Hessian协议,Dubbo源代码有各种协议的实现,我们之前没用Dubbo之前时,大部分都用Hessian来使用我们服务的暴露和调用,利用HessianProxyFactory调用远程接口.

    Dubbo原理

    初始化过程细节: 第一步,就是将服务装载容器中,然后准备注册服务.和spring中启动过程类似,spring启动时,将bean装载进容器中的时候,首先要解析bean.所以dubbo也是先读配置文件解析服务.

    解析服务:

    1)、基于dubbo.jar内的Meta-inf/spring.handlers配置,spring在遇到dubbo名称空间时,会回调DubboNamespaceHandler类.

    2)、所有的dubbo标签,都统一用DubboBeanDefinitionParser进行解析,基于一对一属性映射,将XML标签解析为Bean对象.生产者或者消费者初始化的时候,会将Bean对象转会为url格式,将所有Bean属性转成url的参数. 然后将URL传给Protocol扩展点,基于扩展点的Adaptive机制,根据URL的协议头,进行不同协议的服务暴露和引用.

    暴露服务:

    a、 直接暴露服务端口

    在没有使用注册中心的情况,这种情况一般适用在开发环境下,服务的调用这和提供在同一个IP上,只需要打开服务的端口即可. 即,当配置 or ServiceConfig解析出的URL的格式为: Dubbo://service-host/com.xxx.TxxService?version=1.0.0 基于扩展点的Adaptiver机制,通过URL的"dubbo://"协议头识别,直接调用DubboProtocol的export()方法,打开服务端口.

    b、向注册中心暴露服务:

    和上一种的区别:需要将服务的IP和端口一同暴露给注册中心. ServiceConfig解析出的url格式为: registry://registry-host/com.alibaba.dubbo.registry.RegistryService?export=URL.encode("dubbo://service-host/com.xxx.TxxService?version=1.0.0")

    基于扩展点的Adaptive机制,通过URL的"registry://"协议头识别,调用RegistryProtocol的export方法,将export参数中的提供者URL先注册到注册中心,再重新传给Protocol扩展点进行暴露: Dubbo://service-host/com.xxx.TxxService?version=1.0.0

    引用服务:

    a、直接引用服务:

    在没有注册中心的,直连提供者情况下, ReferenceConfig解析出的URL格式为: Dubbo://service-host/com.xxx.TxxService?version=1.0.0

    基于扩展点的Adaptive机制,通过url的"dubbo://"协议头识别,直接调用DubboProtocol的refer方法,返回提供者引用.

    b、从注册中心发现引用服务:

    此时,ReferenceConfig解析出的URL的格式为: ·registry://registry-host/com.alibaba.dubbo.registry.RegistryService?refer=URL.encode("consumer://consumer-host/com.foo.FooService?version=1.0.0")

    基于扩展点的Apaptive机制,通过URL的"registry://"协议头识别,就会调用RegistryProtocol的refer方法,基于refer参数总的条件,查询提供者URL,如: Dubbo://service-host/com.xxx.TxxService?version=1.0.0

    基于扩展点的Adaptive机制,通过提供者URL的"dubbo://"协议头识别,就会调用DubboProtocol的refer()方法,得到提供者引用. 然后RegistryProtocol将多个提供者引用,通过Cluster扩展点,伪装成单个提供这引用返回.

    四、服务提供与消费详细过程

    服务提供者暴露一个服务的详细过程

    暴露服务的主过程:

    首先ServiceConfig类拿到对外提供服务的实际类ref,然后将ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到invoker的转化.接下来就是Invoker转换到Exporter的过程. Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程,下面我们以Dubbo和rmi这两种典型协议的实现来进行说明: Dubbo的实现: Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export方法,它主要是打开socket侦听服务,并接收客户端发来的各种请求,通讯细节由dubbo自己实现. Rmi的实现: RMI协议的Invoker转为Exporter发生在RmiProtocol类的export方法,他通过Spring或Dubbo或JDK来实现服务,通讯细节由JDK底层来实现.

    服务消费的主过程

    服务消费的主过程:

    首先ReferenceConfig类的init方法调用Protocol的refer方法生成Invoker实例.接下来把Invoker转为客户端需要的接口

    总结

    以 上就是我对Java开发Dubbo分布式框架使用及原理分析及其优化总结,分享给大家,希望大家知道什么是Java开发Dubbo分布式框架使用及原理分析问题及其优化.本篇文章是由济南UI培训为您呈现,希望给您带来更多更好的文章,喜欢的朋友们可以加微信公众号.

更多济南UI培训相关咨询,请扫描下方二维码.

济南ui培训

上一篇:想象中的电商和现实中的电商的区别
下一篇:零基础可以学习UI设计吗?

SEO新手接手新网站该怎么做?

SEM推广怎么做?

怎么才能做好SEM?

SEM的常见问题

选择城市和中心
贵州省

广西省

海南省

达内教育

有位老师想和您聊一聊