`

dubbo的实现

 
阅读更多

参考:该文章,从其他文章摘录和总结。

Dubbo支持多种协议,如下所示:

Dubbo协议

Hessian协议

HTTP协议

RMI协议

WebService协议

Thrift协议

Memcached协议

Redis协议

1、缺省协议:采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况。Dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低

实现原理:

  1. client一个线程调用远程接口,生成一个唯一的ID(比如一段随机字符串,UUID等),Dubbo是使用AtomicLong从0开始累计数字的
  2. 将打包的方法调用信息(如调用的接口名称,方法名称,参数值列表等),和处理结果的回调对象callback,全部封装在一起,组成一个对象object
  3. 向专门存放调用信息的全局ConcurrentHashMap里面put(ID, object)
  4. 将ID和打包的方法调用信息封装成一对象connRequest,使用IoSession.write(connRequest)异步发送出去
  5. 当前线程再使用callback的get()方法试图获取远程返回的结果,在get()内部,则使用synchronized获取回调对象callback的锁, 再先检测是否已经获取到结果,如果没有,然后调用callback的wait()方法,释放callback上的锁,让当前线程处于等待状态。
  6. 服务端接收到请求并处理后,将结果(此结果中包含了前面的ID,即回传)发送给客户端,客户端socket连接上专门监听消息的线程收到消息,分析结果,取到ID,再从前面的ConcurrentHashMap里面get(ID),从而找到callback,将方法调用结果设置到callback对象里。
  7. 监听线程接着使用synchronized获取回调对象callback的锁(因为前面调用过wait(),那个线程已释放callback的锁了),再notifyAll(),唤醒前面处于等待状态的线程继续执行(callback的get()方法继续执行就能拿到调用结果了),至此,整个过程结束。

2、RMI协议:采用JDK标准的java.rmi.*实现,采用阻塞式短连接和JDK标准序列化方式,可传文件。

a、如果服务接口继承了java.rmi.Remote接口,可以和原生RMI互操作,即:

提供者用Dubbo的RMI协议暴露服务,消费者直接用标准RMI接口调用,

或者提供方用标准RMI暴露服务,消费方用Dubbo的RMI协议调用。

b、如果服务接口没有继承java.rmi.Remote接口,

缺省Dubbo将自动生成一个com.xxx.XxxService$Remote的接口,并继承java.rmi.Remote接口,并以此接口暴露服务,

但如果设置了<dubbo:protocol name="rmi" codec="spring" />,将不生成$Remote接口,而使用Spring的RmiInvocationHandler接口暴露服务,和Spring兼容。

3、 hessian协议

Hessian协议用于集成Hessian的服务,Hessian底层采用Http通讯,采用Servlet暴露服务,Dubbo缺省内嵌Jetty作为服务器实现,可传文件。

  Hessian是Caucho开源的一个RPC框架:http://hessian.caucho.com,其通讯效率高于WebService和Java自带的序列化。

4、http协议

   此协议采用spring 的HttpInvoker的功能实现,暂不支持传文件。

  连接个数:多个

  连接方式:长连接

  连接协议:http

  传输方式:同步传输

  序列化:表单序列化

  适用范围:传入传出参数数据包大小混合,提供者比消费者个数多,可用浏览器查看,可用表单或URL传入参数,暂不支持传文件。

  适用场景:需同时给应用程序和浏览器JS使用的服务。

分享到:
评论

相关推荐

    分布式框架dubbo实现

    在本项目中,我们将深入探讨如何利用Dubbo实现服务的生产和消费,并结合ZooKeeper进行服务注册与发现。 首先,我们要了解的是`dubbo-provider`,这是Dubbo框架中的服务提供者部分。服务提供者会将自身服务注册到...

    Dubbo实现的文件服务器系统(java)

    【标题】"Dubbo实现的文件服务器系统(java)"是一个基于Java技术并利用Apache Dubbo框架构建的分布式文件服务项目。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,它主要用于实现服务间的远程调用,提高...

    dubbo实现的消费者,提供者的demo

    这个名为"Dubbo实现的消费者,提供者的demo"的项目,旨在通过实例演示如何使用Dubbo来创建服务消费者和服务提供者,并将它们进行模块化的拆分。下面,我们将深入探讨这些关键知识点。 1. **Dubbo架构核心组件**: ...

    springboot集成dubbo实现服务提供调用

    【SpringBoot集成Dubbo实现服务提供与调用】 在现代微服务架构中,Spring Boot以其简洁的配置和快速的应用开发能力被广泛应用,而Dubbo作为阿里巴巴开源的高性能服务框架,致力于提供高性能和透明化的RPC(远程过程...

    基于dubbo实现的服务发布与订阅demo

    【标题】:“基于dubbo实现的服务发布与订阅demo” 在分布式系统中,服务的发布与订阅是关键组件,它使得各个服务之间能够有效地通信。Dubbo是一个高性能、轻量级的Java服务框架,由阿里巴巴开源,它提供了服务注册...

    基于dubbo实现的rpc框架RPC

    **基于Dubbo实现的RPC框架详解** RPC(Remote Procedure Call)框架是分布式系统中的关键组件,它允许在不同网络节点间的程序进行透明的交互,仿佛它们是在同一进程中执行一样。Dubbo,作为阿里巴巴开源的一款高...

    基于dubbo实现的rpc框架RPC 框架

    基于Dubbo实现的RPC框架,是Java开发中常见的一种高效率、高性能的服务治理方案,尤其在微服务架构中广泛应用。 Dubbo是由阿里巴巴开源的高性能RPC框架,它提供了服务注册、服务发现、负载均衡、流量控制、熔断降级...

    dubbo实现demo

    在本示例 "dubbo实现demo" 中,我们可以通过三个关键部分理解其工作原理:`dubbo-demo-consumer`(消费者)、`dubbo-demo-api`(接口定义)和`dubbo-demo-provider`(提供者)。 首先,`dubbo-demo-api` 包含了服务...

    dubbo实现两个项目之间互相通信

    本示例将深入探讨如何利用Dubbo实现两个项目之间的互相通信。 首先,理解Dubbo的核心概念至关重要。Dubbo由阿里巴巴开源,它的主要功能包括服务注册与发现、远程调用、负载均衡、容错、监控等。它通过提供服务提供...

    zookeeper,Dubbo实现简单的分布式贴吧系统.zip

    【标题】"Zookeeper与Dubbo在实现简单分布式贴吧...以上就是基于Zookeeper和Dubbo实现的分布式贴吧系统中的主要技术知识点,通过这些技术,我们可以构建出一个高可用、可扩展的分布式应用,满足大规模用户的访问需求。

    Dubbo 实现远程调用

    1、Dubbo 远程调用实现 2、内带zookeeper-3.4.5消息服务 3、直接导入myeclipse运行:dubbo-server导入tomcat中运行 4、dubbo-client 运行测试类/dubbo-client/src/com/fengjx/main/Consumer.java

    基于SpringBoot+Zookeeper+Dubbo实现的分布式高并发商品秒杀系统.zip

    总之,这个基于SpringBoot+Zookeeper+Dubbo实现的分布式高并发商品秒杀系统,结合MySQL数据库,提供了从服务治理到数据管理的完整解决方案,旨在实现高效、可靠的秒杀业务处理。通过源码学习,开发者可以深入理解...

    使用SpringCloudAlibaba技术栈中的Nacos和Dubbo实现模拟商城系统.zip

    通过这个项目,开发者可以学习到如何使用SpringBoot构建Web应用,如何利用Dubbo实现微服务间的通信,以及如何借助Nacos进行服务治理,同时还能了解到如何设计和管理MySQL数据库来满足商城系统的业务需求。...

    基于SpringBoot+MyBatis+dubbo实现的在线程序竞赛系统源码(含用户前台、管理员后台和测评系统).zip

    基于SpringBoot+MyBatis+dubbo实现的在线程序竞赛系统源码(含用户前台、管理员后台和测评系统).zip 【资源介绍】 一个在线程序竞赛系统,包括用户前台、管理员后台和测评系统组成,基于SpringBoot+MyBatis + dubbo...

    dubbo实现例子

    在这个"Dubbo实现例子"中,我们将深入理解如何使用Dubbo构建一个简单的应用,并结合Zookeeper作为服务注册中心。 1. **Dubbo核心组件**:Dubbo主要包括服务提供者(Provider)、服务消费者(Consumer)、注册中心...

    Dubbo实现CURD

    "Dubbo实现CURD"这个主题是关于如何使用Dubbo来完成基本的数据库操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)。在分布式系统中,这些基本操作是构建业务逻辑的基础。接下来,我们将深入探讨如何...

    Java rpc框架简易版,类似dubbo分布式实现 (纯socket实现).zip

    本项目提供了一个简易版的Java RPC框架实现,旨在模仿著名的Dubbo框架,但采用了更基础的Socket通信方式进行分布式服务的搭建。以下是这个项目的核心知识点: 1. **RPC原理**:RPC使得客户端可以像调用本地方法一样...

    最简单的Dubbo案例之三:dubbo实现服务提供者+消费者,SpringBoot + dubbo + zookeeper

    本资料基于 springboot+dubbo+zookeeper 实现分布式服务提供者和消费者的开发 本资料旨在提供最单纯的 dubbo 学习和入门,摒弃了所有非必要的技术,对于dubbo 的入门和理解很有帮助,但对于 dubbo 的深入学习是没有...

Global site tag (gtag.js) - Google Analytics