dubbo

1. 依赖 spring扫描注入

2. 反射

3. 动态代理

4.Zookeeper

5.netty

服务不在本地,具体实现在远程  可以用Dubbo

基于XML 效率低 传输低  解析低   JSON还好一些

Dubbo传输的是二进制数据  对象序列化成二进制    在网络中去传输     获取到二进制反序列化成对象    效率高。并且Java写的,用Java去反序列化。消费端可以是PHP的哈

当然Dubbo可以发布可以通过FastJSON  可以PHP解析 跨语言解析  但是用了JSON效率降低了

但是XML依然有用!

如果有不光有文字 还有图片呢 JSON可以做 但是麻烦。  图片直接写到XML中,一次传输过来。

而且可以进行数据检查,xsd做数据校验

而且可以跨平台 C语言都可以

Restful 接口很灵活的  是个规范 风格  restful一般返回的都是JSON数据格式

JSON里面不能包含太大的数据 太大考虑XML

原理思路:

反射(Class.forName("xxx"))  出Class对象来 然后newInstance() 出对象

有了对象就可以调用方法了  对象是Object 但是不知道是哪个方法啊 需要强转下 看我调用者的接口了

使用接口的目的是 不确定具体类型 抽象出一个接口 通过接口去调用实际方法(实际的是远程jvm的那个哦,远程的那个怎么实现的 我调用的就是那个实现的)

通过反射出类对象,然后动态调用(替换本地的)远程实现类的方法  (执行的是 反序列化后的对象的那个类的方法   )

我大体给大家贴下代码吧:  本质就是动态代理  执行之前做个小动作 去执行了代理类的方法

远端项目启动Spring 时候  扫描包 扫描到注解  扫到自我容器中

然后放(Socket)到ZK中(服务注册中心 去注册服务)登记

或者我在调用方法时候: 比调用 add() 方法时候  不执行本地的方法(本地没有实现)

在调用实际方法时候 通过远程把真正实例 加载到本地 通过 反射(Invoke 动态代理去实现 首先实现接口InvocationHandler)进行拦截执行 动态执行

网络编程 效率最高的还是netty啦~ 所以socket 用的 netty

在调用实际方法时候 通过远程 把这是的实例 加载到本地

动态代理

远程查找对象实例,通过网络Socket获取到

反序列化 并注入对象

Dubbo底层原理的更多相关文章

  1. Dubbo底层采用Socket进行通信详解

    由于Dubbo底层采用Socket进行通信,自己对通信理理论也不是很清楚,所以顺便把通信的知识也学习一下. n  通信理论 计算机与外界的信息交换称为通信.基本的通信方法有并行通信和串行通信两种. 1 ...

  2. Redisson实现Redis分布式锁的底层原理

    一.写在前面 现在面试,一般都会聊聊分布式系统这块的东西.通常面试官都会从服务框架(Spring Cloud.Dubbo)聊起,一路聊到分布式事务.分布式锁.ZooKeeper等知识.所以咱们这篇文章 ...

  3. 我是如何在短期内快速掌握Dubbo的原理和源码的(纯干货)?

    写在前面 上周,在[Dubbo系列专题]中更新了两篇文章<冰河开始对Dubbo下手了!>和<俯瞰Dubbo全局,阅读源码前必须掌握这些!!>,收到了很多小伙伴的微信私聊消息,大 ...

  4. Neo4j图数据库简介和底层原理

    现实中很多数据都是用图来表达的,比如社交网络中人与人的关系.地图数据.或是基因信息等等.RDBMS并不适合表达这类数据,而且由于海量数据的存在,让其显得捉襟见肘.NoSQL数据库的兴起,很好地解决了海 ...

  5. 【T-SQL进阶】02.理解SQL查询的底层原理

    本系列[T-SQL]主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式 ...

  6. spring框架的IOC的底层原理

    1.IOC概念:spring容器创建对象并管理 2.IOC的底层原理的具体实现: 1)所使用的技术: (1). dom4j解析xml配置文件 (2).工厂设计模式(解耦合) (3).反射 第一步:配置 ...

  7. 深入研究Sphinx的底层原理和高级使用

    深入研究Sphinx的底层原理和高级使用

  8. 深入研究Node.js的底层原理和高级使用

    深入研究Node.js的底层原理和高级使用

  9. HashMap的底层原理

    简单说: 底层原理就是采用数组加链表: 两张图片很清晰地表明存储结构: 既然是线性数组,为什么能随机存取?这里HashMap用了一个小算法,大致是这样实现: // 存储时: int hash = ke ...

随机推荐

  1. Python lambda 多变量

    >> x = list(map(lambda x, y: (x>3, y>0), (1,2,3,4,5), (0,1,2,3,4)))>>> x[(False ...

  2. web项目问题总结

    1.项目编码问题:建立项目之初,应统一设置项目组所有电脑的eclipse 默认项目编码,还有各个文件的编码格式 中文乱码的问题,需要三个地方同时设置utf-8编码,第一是数据库里表的编码,第二是jsp ...

  3. Java Web学习总结(10)学习总结-EL表达式

    一,EL 表达式概述(EL主要从域中取数据) EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写. 二,EL从域中 ...

  4. SQL SERVER内部函数大全

    SQL SERVER内部函数是SQL数据库中非常重要的一类函数,下面就为您介绍SQL SERVER内部函数,如果您对此方面感兴趣的话,不妨一看. SQL SERVER内部函数: select @@CO ...

  5. PHP curl_exec函数

    curl_exec — 执行一个cURL会话 说明 mixed curl_exec ( resource $ch ) 执行给定的cURL会话. 这个函数应该在初始化一个cURL会话并且全部的选项都被设 ...

  6. 【HDOJ6610】Game(序列带修莫队)

    题意:有n堆石子,第n堆有a[i]个,A先选择一个范围[L,R],B选择一个子区间[l,r],之后照nim游戏的规则进行 现在有询问与操作 每次询问B在给定的[L,R]内有多少种子区间的取法使得A必胜 ...

  7. MATLAB 中几个颜色空间的坐标范围

    在一些图象处理的程序中,我们经常要在不同的颜色空间操作,而且经常要把各颜色空间的坐标转化到 [0,1] 之间,这就需要知道一些常用颜色空间的坐标范围. 虽然可以通过颜色空间转化的公式推导这些范围,但是 ...

  8. linux超级块和inode 详解 和 df 、du 命令详解与环境变量

    一.inode块,Unix文件的核心. 首先需要明白的是,在Unix操作系统中的任何资源都被当作文件来管理.如目录.光驱.终端设备等等,都被当作是一种文件.从这方面来说,Unix操作系统中的所有的目录 ...

  9. 大数据给IT企业带来攫金市场新机遇

    大数据给IT企业带来攫金市场新机遇 大数据,一个时髦的名词,也是当下热门的业务领域.大数据诱人的利益诉求点之一,即通过大数据能更好地提高效率,更好地有的放矢.一方面,大数据让公司内部更有效地运作:另一 ...

  10. centosifcfg-eth0文件内容为空

    虚拟机安装好CentOS 6系统后,发现ip在每次重启后都会还原,用ifconfig查看是有eth0网卡的(也有可能只有回环网卡lo),于是查看eth0网卡配置文件,发现在 /etc/sysconfi ...