`
konoha
  • 浏览: 4428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【转载】Dubbo基本原理机制

 
阅读更多
转自:http://blog.csdn.net/paul_wei2008/article/details/19355681
分布式服务框架:
–高性能和透明化的RPC远程服务调用方案
–SOA服务治理方案
-Apache MINA 框架基于Reactor模型通信框架,基于tcp长连接
Dubbo缺省协议采用单一长连接和NIO异步通讯
适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
分析源代码,基本原理如下:
  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()方法继续执行就能拿到调用结果了),至此,整个过程结束。
  • 当前线程怎么让它“暂停”,等结果回来后,再向后执行?
     答:先生成一个对象obj,在一个全局map里put(ID,obj)存放起来,再用synchronized获取obj锁,再调用obj.wait()让当前线程处于等待状态,然后另一消息监听线程等到服 务端结果来了后,再map.get(ID)找到obj,再用synchronized获取obj锁,再调用obj.notifyAll()唤醒前面处于等待状态的线程。
  • 正如前面所说,Socket通信是一个全双工的方式,如果有多个线程同时进行远程方法调用,这时建立在client server之间的socket连接上会有很多双方发送的消息传递,前后顺序也可能是乱七八糟的,server处理完结果后,将结果消息发送给client,client收到很多消息,怎么知道哪个消息结果是原先哪个线程调用的?
     答:使用一个ID,让其唯一,然后传递给服务端,再服务端又回传回来,这样就知道结果是原先哪个线程的了。

 

分享到:
评论

相关推荐

    Dubbo基本原理机制

    "Dubbo基本原理机制" Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,以及 SOA 服务治理方案。Dubbo 的基本原理机制可以分为以下几个部分: 1. 客户端调用远程接口时,生成一个...

    dubbo的原理简要概述以及zookeeper的使用

    dubbo概述,简要描述了一下dubbo以及zookeeper的使用和原理

    dubbo核心原理解析.pdf

    标题:“dubbo核心原理解析.pdf”描述:“学习雷神dubbo2.x源码刨析”标签:“dubbo 雷神 源码” 知识点解析: 1. Dubbo框架概述: Dubbo是由阿里巴巴开源的一个高性能Java RPC框架,它提供了丰富的服务治理能力...

    Dubbo RPC框架原理解析和源码

    **一、Dubbo的基本架构** Dubbo的核心组件包括服务提供者(Provider)、服务消费者(Consumer)、注册中心(Registry)、监控中心(Monitor)和协议层(Protocol)。服务提供者暴露服务,服务消费者调用服务,注册中心负责...

    dubbo基本介绍

    dubbo基本介绍

    服务治理中间件dubbo原理解析

    此文档是从学习 dubbo 源码过程中的笔记中整理出来的,由于时间及能力 原因,理解有误之处还请谅解,希望对大家学习使用 dubbo 有所帮助。 dubbo 是阿里基于开源思想 java 实现的服务治理中间件, ...答、原理介绍等。

    尚硅谷最新dubbo视频

    本套视频从分布式系统的基本概念出发,由浅入深,讲解了RPC原理,Dubbo基本使用,Dubbo高可用场景以及Dubbo原理,涉及了分布式系统中服务注册、服务发现、负载均衡、灰度发布、集群容错、服务降级等核心概念的讲解及...

    dubbo原理与文档概述

    《Dubbo原理与文档概述》 Dubbo,作为阿里巴巴开源的一款高性能、轻量级的Java服务框架,旨在提高服务的可扩展性和治理性。本文将深入探讨Dubbo的核心原理、功能实现及其在实际项目中的应用。 一、Dubbo概述 Dubbo...

    Dubbo超时机制导致的雪崩连接

    ### Dubbo超时机制导致的雪崩连接问题分析 #### 一、背景介绍 在分布式系统中,服务间调用非常频繁,为了提高系统的稳定性和可用性,通常会采用诸如Dubbo这样的微服务框架来进行服务治理。Dubbo作为一款高性能、轻...

    dubbo入门学习框架源码

    通过深入学习和实践Dubbo源码,开发者不仅可以更好地理解Dubbo的工作原理,还能在实际项目中灵活运用,解决各种复杂的分布式服务问题。Dubbo的源码阅读也是一个不断提升自身技术深度的过程,有助于成长为更优秀的...

    Dubbo核心原理讲解&源码精读

    ### Dubbo核心原理详解及源码精读 #### 一、Dubbo简介 Dubbo是一个高性能、轻量级的开源微服务框架,旨在为开发者提供简单、高效的服务管理和调用解决方案。它支持多种协议,包括HTTP、Dubbo协议等,并且能够通过...

    dubbo 使用基本功能demo

    消费者通过Dubbo的代理机制,自动处理网络通信和异常处理。 4. **SpringBoot集成**:在文件列表中提到了`springboot`,这意味着这个示例是基于SpringBoot搭建的。SpringBoot简化了Spring应用的初始搭建和配置过程,...

    尚硅谷Dubbo 2018年8月28发布

    Dubbo_高可用_负载均衡机制.avi 22、尚硅谷_Dubbo_高可用_服务降级.avi 23、尚硅谷_Dubbo_高可用_服务容错&Hystrix;.avi 24、尚硅谷_Dubbo_原理_RPC&Netty;原理.avi 25、尚硅谷_Dubbo_原理_框架设计.avi 26、尚硅谷_...

    dubbo原理以及测试实例

    以上就是 Dubbo 的基本原理和一个简单的测试实例。通过这种方式,我们可以快速搭建起一个分布式服务架构,利用 Dubbo 的强大功能来实现服务的高可用、高性能和可扩展性。在实际项目中,还需要考虑更多的细节,例如...

    dubbo资源 dubbo-admin dubbo demo

    3. **Dubbo-demo**: 示例项目通常会展示Dubbo的基本用法,例如如何创建服务提供者和服务消费者,如何配置服务接口和实现,如何进行服务注册和调用,以及如何利用Dubbo的其他高级特性,如集群策略、过滤器、监控等。...

    dubbo spi可扩展机制源码解析

    下面我们将深入剖析Dubbo SPI的源码,了解其实现原理。 首先,我们要理解SPI的核心概念:接口、实现类和服务发现。在Java世界中,SPI允许开发者定义一个接口,然后提供多个实现该接口的类,系统在运行时会自动发现...

    深入理解Spring与Dubbo整合原理与源码分析:从启动类配置到注解解析.rar

    总之,深入理解Spring与Dubbo的整合原理,不仅需要掌握两大框架的基本概念和功能,还需要对它们如何协同工作有深入的了解,包括配置、注解解析、服务治理和源码层面的交互。通过这样的学习,开发者能够更好地设计和...

Global site tag (gtag.js) - Google Analytics