来源:jianshu.com/p/29d75a25eeaf

整编:Java技术栈(公众号ID:javastack)

前言

在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A。通常都是B把API上传到Maven私服,然后B开始写API的实现,A只需要引入API依赖进行开发即可。

订单服务调用商品服务

上图简单的描述了RPC在实际场景中的应用,我们在开发中当然是利用现有的RPC框架来快速实现业务需求,比如百度开源了baidu-rpc,阿里的Dubbo早已声名在外,腾讯自己玩TAF。一文告诉你 RMI 和 RPC 的区别!本篇博客将实现一个迷你版的RPC,探索下RPC底层实现的奥秘!在Java技术栈微信公众号后台回复关键字:分布式,可以获取更多栈长整理的 Java 系列技术干货。

动手实现RPC

商品服务工程

商品服务工程

注意,我将商品服务的API以及实现分为Maven的2个模块来开发。这里,我们想给定一个商品ID,查询得到商品对象信息。

商品对象

商品API

Product

要注意的是,Product是可以被序列化的,Why?

很显然,订单系统调用商品系统的时候,需要商品系统返回一个商品,必然涉及到发生网络传输,这就涉及对象的序列化和反序列化了。

商品查询API接口

商品查询API

订单系统调用商品服务

订单服务调用商品服务

在订单系统工程中需要引入商品服务API依赖。

在上图代码中,最重要的就是rpc方法了!

rpc实现方法

rpc

第一,我们看到了Proxy.newProxyInstance

很显然在进行动态代理。也即是说,在订单服务调用商品服务的代码中,我们先是通过动态代理返回一个代理的IProductService类型对象,这意味着当代理对象调用queryById方法的时候,会自动调用invoke方法!

第二,我们看看invoke到底做了些什么?

它本质上就是进行Socket通信,那么它需要传递什么信息给到商品服务呢?

我们知道订单系统就是想调用商品服务的某个类的某个方法,然后把这个方法的返回结果传输给订单系统!

想一想,如何调用某个类的某个方法呢?

只要我们能确定这个类的全限定类名、确定方法名、确定方法的参数类型,给定方法需要的具体参数,通过反射就能实现。

商品服务调用后得到的结果,我们序列化写入Socket流中,在订单系统中反序列化得到对象即可。

第三,这里需要思考一个问题

在订单系统中我们只知道商品服务的API,并不知道这背后的API到底是如何实现的,所以我们需要有一个映射,就是商品服务的API到商品服务的实现的一个映射关系,其实这就是所谓的服务的注册!

商品服务

商品服务API实现

商品服务

商品服务

从这里,可以清晰的看到,商品服务读取了订单系统调用商品系统时发送的数据,利用反射机制,进行方法调用,并把调用结果写入Socket输出流。

运行结果

启动商品服务后,通过订单系统发起对商品服务的调用。

在Java技术栈微信公众号后台回复关键字:分布式,可以获取更多栈长整理的 Java 系列技术干货。

最近干货分享

年底了,是时候做个了断了。。。

别再写 bug 了,避免空指针的 5 个案例!

从 0 开始手写一个 Mybatis 框架,三步搞定!

参数验证 @Validated 和 @Valid 的区别

StringBuffer 和 StringBuilder 的 3 个区别!

点个好看再走呗~

↓↓↓

java 实现订单合并_向高手进阶,从 0 开始手写实现一个 RPC 框架!相关推荐

  1. 向高手进阶,从 0 开始手写实现一个 RPC 框架!

    前言 在实际后台服务开发中,比如订单服务(开发者A负责)需要调用商品服务(开发者B负责),那么开发者B会和A约定调用API,以接口的形式提供给A.通常都是B把API上传到Maven私服,然后B开始写A ...

  2. 从 0 开始手写一个 Spring MVC 框架,向高手进阶

    转载自   从 0 开始手写一个 Spring MVC 框架,向高手进阶 Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如 ...

  3. JavaScript进阶必会的手写功能(二)

    JavaScript进阶必会的手写功能(一) 6. 手写浅拷贝 6.1 JavaScript数据类型分类 1. 简单数据类型: Number. String.Boolean.null.undefine ...

  4. java基础巩固-宇宙第一AiYWM:为了维持生计,手写RPC~Version07(RPC原理、序列化框架们、网络协议框架们 、RPC 能帮助我们做什么呢、RPC异常排查:ctrl+F搜超时)整起

    上次Version06说到了咱们手写迷你版RPC的大体流程, 对咱们的迷你版RPC的大体流程再做几点补充: 为什么要封装网络协议,别人说封装好咱们就要封装?Java有这个特性那咱就要用?好像是这样.看 ...

  5. java识别手写文字_神经网络入门 第6章 识别手写字体

    前言 神经网络是一种很特别的解决问题的方法.本书将用最简单易懂的方式与读者一起从最简单开始,一步一步深入了解神经网络的基础算法.本书将尽量避开让人望而生畏的名词和数学概念,通过构造可以运行的Java程 ...

  6. 前端为什么有的接口明明是成功回调却执行了.catch失败回调_前端进阶高薪必看-手写源码篇(高频技术点)...

    前言 此系列作为笔者之前发过的前端高频面试整理的补充 会比较偏向中高前端面试问题 当然大家都是从新手一路走过来的 感兴趣的朋友们都可以看哈 初衷 我相信不少同学面试的时候最怕的一个环节就是手写代码 大 ...

  7. java 8实战 异步社区_服!看完阿里大牛手写的Java异步编程实战笔记,我惊呆了...

    这份笔记涵盖了Java中常见的异步编程场景,包括单JVM内的异步编程.跨主机通过网络通信的远程过程调用的异步调用与异步处理,以及Web请求的异步处理等. 在讲解Java中每种异步编程技术时都附有案例, ...

  8. 从0开始手写一个 SpringMVC 框架,向高手进阶!

    Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面.如果不看Spring的源码,你将会失去一次和大师学习的机会:它的代码规范,设 ...

  9. mysql事务手写笔记_兴奋了!阿里技术官手写“MySQL笔记”,传授你年薪百万级干货...

    前言 MySQL重要吗?重要!为什么重要?因为它在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展.阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的.My ...

  10. all方法 手写promise_前端进阶高薪必看手写源码篇

    前言 此系列作为笔者之前发过的前端高频面试整理的补充 会比较偏向中高前端面试问题 当然大家都是从新手一路走过来的 感兴趣的朋友们都可以看哈 初衷 我相信不少同学面试的时候最怕的一个环节就是手写代码 大 ...

最新文章

  1. 钱颖一:人工智能将使中国教育优势荡然无存
  2. 大脑活动与认知: 热力学与信息论的联系
  3. hdoj1175 连连看(dfs+剪枝)
  4. Qt QComboBox下拉框文字重叠解决方法
  5. gorm增删查改json_gorm 关联查询请教
  6. win7怎么安装nodejs_怎么解决win7安装软件提示
  7. React Hooks的使用(三)——useRef、useImperativeHandle、useLayoutEffect解析、自定义Hook
  8. 编译原理--中间代码生成(自己看)
  9. 电脑版我的世界java_我的世界pc JAVA版
  10. u盘电视测试软件,怎么把u盘里的软件装到tcl电视上
  11. VirtualBox安装Win10系统
  12. R 计算时间序列自相关性教程
  13. web前端期末大作业 基于HTML+CSS家乡主题毕业设计源码 (1)
  14. Kerberos异常之unnable to obtain password from user
  15. 影像扫描系统连接服务器失败,您的扫描仪不能与ImageCapture配合使用
  16. Ultra Recal 一款DIY的个人管理软件
  17. qq屏幕识图如何一次复制所有文字
  18. 数据科学家们,三年后你还能做什么?
  19. 剑三游戏总是显示服务器繁忙,剑网三缘起:终究低估了老玩家的热情,服务器被挤爆...
  20. Firefox(火狐浏览器)加速技巧 - 如何设置火狐

热门文章

  1. tamtam-nuget-imageserver
  2. Web前端开发最佳实践(7):使用合理的技术方案来构建小图标
  3. C++基本类型隐性转换。
  4. 【github】命令和错误小结
  5. 微波遥感SNAP(二)——基于Sentinel-1雷达数据反演矿区地表形变
  6. mysql 查询结果导出文件并导入文件到数据库
  7. IDEA使用技巧--在文件导航栏中屏蔽指定后缀名的文件
  8. 来,教你写一手好SQL!
  9. 记一次重构:Android实践从MVC架构到MVP架构
  10. 理工科学生计算机要求,理工科学生