消息队列高手课
李玥
京东零售技术架构部资深架构师
立即订阅
8426 人已学习
课程目录
已完结 41 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 优秀的程序员,你的技术栈中不能只有“增删改查”
免费
预习 | 怎样更好地学习这门课?
基础篇 (8讲)
01 | 为什么需要消息队列?
02 | 该如何选择消息队列?
03 | 消息模型:主题和队列有什么区别?
04 | 如何利用事务消息实现分布式事务?
05 | 如何确保消息不会丢失?
06 | 如何处理消费过程中的重复消息?
07 | 消息积压了该如何处理?
08 | 答疑解惑(一) : 网关如何接收服务端的秒杀结果?
进阶篇 (21讲)
09 | 学习开源代码该如何入手?
10 | 如何使用异步设计提升系统性能?
11 | 如何实现高性能的异步网络传输?
12 | 序列化与反序列化:如何通过网络传输结构化的数据?
13 | 传输协议:应用程序之间对话的语言
14 | 内存管理:如何避免内存溢出和频繁的垃圾回收?
加餐 | JMQ的Broker是如何异步处理消息的?
15 | Kafka如何实现高性能IO?
16 | 缓存策略:如何使用缓存来减少磁盘IO?
17 | 如何正确使用锁保护共享数据,协调异步线程?
18 | 如何用硬件同步原语(CAS)替代锁?
19 | 数据压缩:时间换空间的游戏
20 | RocketMQ Producer源码分析:消息生产的实现过程
21 | Kafka Consumer源码分析:消息消费的实现过程
22 | Kafka和RocketMQ的消息复制实现的差异点在哪?
23 | RocketMQ客户端如何在集群中找到正确的节点?
24 | Kafka的协调服务ZooKeeper:实现分布式系统的“瑞士军刀”
25 | RocketMQ与Kafka中如何实现事务?
26 | MQTT协议:如何支持海量的在线IoT设备?
27 | Pulsar的存储计算分离设计:全新的消息队列设计思路
28 | 答疑解惑(二):我的100元哪儿去了?
案例篇 (7讲)
29 | 流计算与消息(一):通过Flink理解流计算的原理
30 | 流计算与消息(二):在流计算中使用Kafka链接计算任务
31 | 动手实现一个简单的RPC框架(一):原理和程序的结构
32 | 动手实现一个简单的RPC框架(二):通信与序列化
33 | 动手实现一个简单的RPC框架(三):客户端
34 | 动手实现一个简单的RPC框架(四):服务端
35 | 答疑解惑(三):主流消息队列都是如何存储消息的?
测试篇 (2讲)
期中测试丨10个消息队列热点问题自测
免费
期末测试 | 消息队列100分试卷等你来挑战!
结束语 (1讲)
结束语 | 程序员如何构建知识体系?
消息队列高手课
登录|注册

31 | 动手实现一个简单的RPC框架(一):原理和程序的结构

李玥 2019-10-05
你好,我是李玥。
接下来的四节课,我们会一起实现一个 RPC 框架。你可能会问,为什么不实现一个消息队列,而要实现一个 RPC 框架呢?原因很简单,我们课程的目的是希望你能够学以致用举一反三,而不只是照猫画虎。在之前的课程中,我们一直在讲解消息队列的原理和实现消息队列的各种技术,那我们在实践篇如果再实现一个消息队列,不过是把之前课程中的内容重复实现一遍,意义不大。
消息队列和 RPC 框架是我们最常用的两种通信方式,虽然这两种中间系统的功能不一样,但是,实现这两种中间件系统的过程中,有很多相似之处,比如,它们都是分布式系统,都需要解决应用间通信的问题,都需要解决序列化的问题等等。
实现 RPC 框架用到的大部分底层技术,是和消息队列一样的,也都是我们在之前的课程中讲过的。所以,我们花四节课的时间来实现一个 RPC 框架,既可以检验你对进阶篇中学习到的底层技术掌握的是不是扎实,又可以学到 RPC 框架的实现原理,买一送一,很超值。
接下来的四节课,我们是这样安排的。本节课,我们先来学习 RPC 框架的实现原理,然后我们一起看一下如何来使用这个 RPC 框架,顺便给出整个项目的总体结构。第二节课中,一起来实现 RPC 框架的通信与序列化部分,最后的两节课,分别来实现客户端与服务端这两部分。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《消息队列高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • 姜戈
    太棒了,这是买一送一呀,这个专栏学到的绝不只是消息中间件知识~,还帮我们打通任督二脉,赞~
    2019-10-12
    4
  • QQ怪
    牛逼,老师厉害了
    2019-10-05
    3
  • cppby
    卧槽 这一篇 看完 对rpc理解茅塞顿开。。谢谢
    2019-11-08
    1
  • 海罗沃德
    感覺老師講的這個跟EJB很像,name service和JNDI很像,求教是不是這樣?

    作者回复: 是的,实质上就是一个东西 。

    2019-10-21
    1
  • A:春哥大魔王
    老师 桩的实现可在编译阶段和运行时阶段,在选择上除了语言本身特点外,性能上有没有差异,比如运行时阶段跑不掉使用代理反射,如果直接在编译时生成代理类,是不是可以减少这部分性能损耗

    作者回复: 严格来说,性能肯定是有差异的。
    但是在用于生产的RPC框架中,生成的桩的实例都是可以反复调用的,而不是每调用一次就重新生成一次桩,对于已经生成好的桩,调用的时候,就和动态编译还是静态编译没有关系了,所以,考虑反复多次调用的平均性能,几种方式其实是差不多的。

    2019-10-08
    1
  • 陈华应
    看得困意全无!
    2019-10-07
    1
  • 每天晒白牙
    激动,太喜欢这个专栏了
    2019-10-05
    1
  • FATMAN89
    老师能说一下,一个工业级别,生产级别的rpc,框架,比如说dubbo,在真正的实现上,与您的这个rpc框架,需要考虑哪些更多,更复杂的问题吗?多谢了!

    作者回复: 原理是一样的,生产级的系统,会考虑很多细节,比如,兼容各种环境,各种错误处理和保护,各种参数的默认合理值是多少?各种应用场景下需要的一些特定小功能,性能考虑等等

    2019-12-06
  • 饭粒
    1.这样看 spring cloud 的 feign 不算 RPC 框架。。
    2.stub 这个概念和远程代理 RMI 里的 stub,skeleton 蛮现实的。
    2019-11-21
  • Geek_35963d
    看了22节一直想看这节课,实在控制不住了,直接跳过来,看评论说老师讲的东西涉及广不深入,我觉得这种方式很好,掌握了很多知识点,有的甚至老师一句话的事就搞定了我一直没弄懂的东西,整体学完后再自己深入会有更好的效果,老师讲的再深入,自己不研究也是白费不是吗
    很喜欢黄渤老师的课,和授教方式,能看出来老师对知识的融会贯通程度,那是相当的溜,心里肯定更有很多大鱿鱼,希望自己的鱿鱼也早日成型
    2019-11-19
  • oh..
    老师我想问下,这个RPC调用过程是不是所有流程都是同步的,等于从客户端开始调用服务端接口就会一直阻塞到等返回相应结果后,程序才会结束。就像直接调用HTTP请求一样,一来一回,还是会出现几次请求返回的。这个问题我有点疑惑

    作者回复: 是这样的,虽然我们的网络传输部分使用了异步设计,但是由于rpc调用本身是同步的,所以整个调用过程还是同步的。

    2019-10-22
  • 一步
    不是做 java 的,对与 RPC 的调用方式 不是很理解
    客户端去注册中心 找到对应的需要执行的方法,和通知服务端需要执行的方法,不还是要进行通讯的吗?这个通讯走的不是http了?

    作者回复: 最后一节课会回答你这个问题

    2019-10-12
收起评论
12
返回
顶部