简介:

前提是对NIO与zookpper有一定的理解

  • 1. dubbo暴露服务过程

duboo是用NIO异步通信的(不懂NIO自己去查,就知道dubbo为什么使用NIO,而不用IO了)。provider服务启动时候,在zookeeper注册节点处理请求,将结果返回给客户端。消费者在使用的时候,主要是订阅zookpeer节点,并对zookpper进行监听,provider有变化,zookeeper会推送给调用方,调用方重新缓存服务信息。服务方,消费方,zookpper三者之间都是长连接。

  1. 2.dubbo远程调用过程
  • client发出请求之后,会生成一个请求ID,requestID(唯一的,类似UUID),dubbo默认从0开始累加
  • 将调用方法信息打包(接口名称,方法名,参数),和处理结果回调对象callback,封装在一起组成一个对象object
  • 将调用信息放到Map里面map.put(ID,object)
  • 将ID和object组成一个connrequest对象,通过异步发送出去IOsession.write(connrequest)
  • 客户端从callbakc中获取服务端返回数据,若是获取不到,就调用wait方法,使线程处于等待状态
  • 服务器端首都请求处理之后,将结果返回和ID一起返回,客户端监听线程,监听服务端数据返回的,客户端监听到数据返回之后,通过ID,获取callback,将服务端返回的数据放到callback中
  • 这时候callback中有返回数据,客户端处于等待的线程被唤醒,从callback中通过get()方法获取服务端数据,至此整个过程基本就结束了(callback每次调用都会产生一个新的,不能共享)

(欢饮评论指正)

dubbo调用原理,过程(知其然,知其所以然)相关推荐

  1. 知行合一:知其然知其所以然

    知行合一:知其然知其所以然. 一个事情做成了,并不意味着你知道做成这件事背后蕴藏的原理. 只有使用冥思.事上练的方法了,将背后的原理提取出来,才能说做到了执行合一. 这个过程是行对知的精进过程. 转载 ...

  2. 锁,知其然知其所以然

    ​ Taken by iCola 今天,从一个小问题聊起. 假设你账户上原来有100元钱,你用微信支付100元,与此同时你女票用支付宝给你转100元零花钱,你帐户的余额有没有可能变成200元或者0元? ...

  3. Vue2.0源码解析 - 知其然知其所以然之Vue.use

    前言 小伙伴们大家好.用过Vue的小伙伴都知道,在我们进行Vue开发时,避免不了会使用一些第三方的库,比如说ElementUI组件库.当我们导入好这些组件库后会执行一个Vue.use函数,然后把导进来 ...

  4. redis zset转set 反序列化失败_关于Redis中的五种数据结构,要知其然知其所以然...

    Redis作为Nosql的代表,想必大家已经再熟悉不过了,除了作为缓存来使用,Redis还提供了其他很多有用的功能,例如可作为消息队列.分布式锁.不隆过滤器.限流等功能使用.今天先来说一说redis作 ...

  5. bootstraptable获取所有数据_关于Redis中的五种数据结构,要知其然知其所以然

    Redis作为Nosql的代表,想必大家已经再熟悉不过了,除了作为缓存来使用,Redis还提供了其他很多有用的功能,例如可作为消息队列.分布式锁.不隆过滤器.限流等功能使用.今天先来说一说redis作 ...

  6. Android转换位图BUG,知其然不知其所以然

    在开发某App的时候,发现了一个很奇怪的bug,前面我也发了关于bitmap的总结,但是这个问题恰恰出在BitmapFactory.decodeFile(pathName)这个函数上,使用这个函数在我 ...

  7. Vue2.0源码解析 - 知其然知其所以然之keep-alive

    前言 [一天一个小知识,每天进步一点点]小伙伴们大家好,今天将要给大家分享是Vue中关于组件缓存的一个内置组件 - keep-alive 不知道小伙伴们有没有遇到这样一种情况,在我们的项目开发中,有时 ...

  8. bool类型_Python3.7知其然知其所以然-第七章 类型转换

    使用python处理数据时,不可避免的要进行数据类型之间的转换,诸如整型和字符串之间的转换. 转换有隐式和显式转换,隐式也称自动转换,不用做特殊.显示转换,也称为数据类型的强制类型转换,通过内置函数实 ...

  9. 算出当前系统后某个月的日期_Python3.7知其然知其所以然-第十八章 日期函数

    时光不可追,往事不可回.以往创建的数据,如若没有日期做标识,不堪回首.几乎任何一个产品都会用到日期,如登录日期.创建日期.修改日期等.正因如此,编程语言中,几乎都有内置日期函数. 18.1 当前日期 ...

  10. 字符串去掉两端的引号_Python3.7知其然知其所以然-第六章 字符串

    在开发过程中,经常会用到字符串来存储字符内容.在其他编程语言中用成对双引号" "声明字符串,用成对单引号' '声明单个字符,而Python没有这种区别,它无论单个或多个字符都用字符 ...

最新文章

  1. npp夜光数据介绍 viirs_惊艳!珞珈一号卫星“眼中”的夜光衡水
  2. 为什么总说做产品经理的门槛低?
  3. ecshop 去除前台模板自动解析CSS/JS/IMG路径
  4. 商业周刊:Facebook为何价值100亿美元(转)
  5. Angular input decorator学习笔记
  6. mysql函数创建与使用_mysql function函数创建与应用方法
  7. csrf攻击ajax,如何在使用ajax post时处理CSRF攻击?
  8. GIS案例练习-----------第一天
  9. apache-DOS
  10. matlab年平均,MATLAB平均每5个元素
  11. css修改文字竖排还是横排
  12. android studio海马玩模拟器
  13. 常见程序(discuz,ecshop,shopex,dedecms等)重置破解管理密码
  14. 2020 12-23 视觉组作业
  15. 基于hive数仓的游戏指标分析
  16. MEMC 是什么意思?
  17. 关于谷歌chrome调试小技巧
  18. Elasticsearch7.3文档管理
  19. URL格式java_URLConnection格式与用法
  20. 一星期机战A的剧情随想

热门文章

  1. Oracle 的 Round函数详解
  2. 计算机在桌面被删了如何恢复,桌面文件被删除怎么恢复?电脑文件误删恢复教程...
  3. OpenG 编程指南英文整理
  4. 常见快速搜索算法图解
  5. pdf图片怎么转换成word文档?
  6. 道德经和译文_道德经 - 道德经全文及译文 - 道德经全文 - 老子道德经
  7. 奔跑吧,旅行商 - 当机器学习遇上组合优化
  8. 阿里云mysql勒索病毒处理_勒索病毒数据库恢复
  9. spring boot实现邮箱验证码注册
  10. Makefile:94: recipe for target 'install-***-recurse' failed 解决方法