2019独角兽企业重金招聘Python工程师标准>>>

首先,这几个概念本就不是同一层次上的东西,本身风马牛不相及。

先说RPC
RPC通常指的是PRC框架(分布式框架),或者PRC协议,如GRPC,JSON-RPC等。这类框架主要解决远程通信间的问题,所以底层的通信机制是不需要使用者去关心去实现就能很好实现远程通信的,最出名的莫过于阿里的dubbo。

再说任务队列
这是个逻辑概念,即比如饭店高峰期时,顾客单子不得不按照下单顺序一个个放在厨房,进行先后炒菜处理,这一堆的单子就是任务队列。

最后说消息队列
消息队列(MQ)可以理解成两个应用程序间(生产者消费者间)的通信,例如短信发送模块,因为模块的发送速度跟不上,这时候需要有一个容器,暂存一下,缓解下压力,那么“消息队列”就是在消息的传输过程中保存消息的“容器”。然后短信模块就可以从容不怕的去消息队列取出要发出的短信内容,进行发送处理。

说实话,第一次看到这个问题,真心有点儿晕。在工作中,任务队列,消息队列和rpc都是常用的实践方案,但是这三者解决的问题似乎没有什么相关性。如:任务队列往往是需要大规模处理业务逻辑时,将相关的任务入队列,进行异步调用,从而解决任务阻塞的问题;消息队列是异构系统(或者说系统)之间异步通信的一种方法,主要是用来解决系统间信息同步问题的;而rpc是一种远程调用方式,是在代码的实现层面异步调用外部服务用的。就这种描述来看,三者之间的确没有什么瓜葛。

但是出于好奇,我在网上搜索了这个问题,发现知乎有相同的问题,并且有大神【灵剑】给出了比较专业的答案,我将其答案描述如下。

任务队列、消息队列、rpc是不同层次上的东西,任务队列是逻辑模型,消息队列是通信模型,RPC是包含了通信模型的编程模型(或者框架)。

消息队列(MQ)是一种能实现生产者到消费者单向通信的通信模型,一般来说是指实现这个模型的中间件,比如RabbitMQ。它可以是一个产品,或者是操作系统提供的一种服务之类。

RPC一般来说是具体指某一种RPC编程框架或协议,如JSON-RPC、GRPC等,它自己有一整套通信的规范,而在此之上实现什么功能是可以定制的。对于RPC来说,调用方不太关心底层的通信机制,只关心它能实现远程调用这一点;框架则不太关心上面承载的究竟是怎样的应用,只负责将调用过程发送到执行端,并将结果回传。

任务队列则是个逻辑上的概念,即将抽象的任务发送到执行的worker的组件,有的时候包含了后端的worker,有的时候不包含,并没有什么具体的形式,也没有什么规范。

这三者并没有特别大的联系,但也不一定是完全不同的东西,比如说RPC可以通过MQ来实现,而任务队列可以通过MQ实现,也可以利用RPC实现,底层可能都是相同的东西,但是因为暴露出了不同性质的接口所以也换了不同的名字。以上的区分也不绝对,很多情况下只是怎么方便就怎么叫。

任务队列是逻辑模型,消息队列是通信模型,RPC是包含了通信模型的编程模型(或者框架),概念清晰,很有概括性,这个答案值得读,也值得了解和学习。尤其是底层的东西可能是相同的,但是封装之后对于提供的接口和功能起不同的名字,更是软件开发中的普遍现象。

群内提供免费的Java架构学习资料,QQ群:643459718

转载于:https://my.oschina.net/u/4051865/blog/3035587

任务队列,消息队列和rpc的区别是什么?相关推荐

  1. Java常用消息队列原理介绍及性能对比

    消息队列使用场景 为什么会需要消息队列(MQ)? 解耦  在项目启动之初来预测将来项目会碰到什么需求,是极其困难的.消息系统在处理过程中间插入了一个隐含的.基于数据的接口层,两边的处理过程都要实现这一 ...

  2. 消息队列 策略_消息队列技术点梳理(思维导图版)

    消息队列作为服务/应用之间的通信中间件,可以起到业务耦合.广播消息.保证最终一致性以及错峰流控(克服短板瓶颈)等作用.本文不打算详细深入讲解消息队列,而是体系化的梳理消息队列可能涉及的技术点,起到提纲 ...

  3. 消息队列设计的精髓基本都藏在本文里了

    当今市面上有很多主流的消息中间件,如老牌的ActiveMQ.RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发的Notify.MetaQ.RocketMQ等.本文不会一一介绍这些消息队列的所有特 ...

  4. 消息队列—简介以及使用场景

    一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链 ...

  5. 深入理解分布式消息队列

    一.消息队列的演进 分布式消息队列中间件是是大型分布式系统中常见的中间件.消息队列主要解决应用耦合.异步消息.流量削锋等问题,具有高性能.高可用.可伸缩和最终一致性等特点.消息队列已经逐渐成为企业应用 ...

  6. ActiveMQ学习总结(8)——消息队列设计精要

    2019独角兽企业重金招聘Python工程师标准>>> 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步R ...

  7. 【kafka】消息队列设计精要

    1.概述 转载:消息队列设计精要 好文章,建议大家去看原文. 消息队列已经逐渐成为企业IT系统内部通信的核心手段.它具有低耦合.可靠投递.广播.流量控制.最终一致性等一系列功能,成为异步RPC的主要手 ...

  8. 消息队列Rabbitmq,在Node.js中的应用

    为什么写这篇文章 现在的面试要求越来越高了,打开看了看几个 BOSS 招聘 Node.js 全栈开发的,其中都有一条"了解 消息队列,并在项目中应用过",呜呜呜 后端开发者应该都知 ...

  9. 大数据之Kafka消息队列

    一.消息队列: 消息队列的核心功能:解耦,异步和并行. 消息队列与rpc区别: 消息队列只负责发送消息:rpc需要调用,并给响应状态码:相同点是他们都能解耦. 消息队列: activeMQ: jdk: ...

最新文章

  1. java获取数组最大最小值
  2. linux git 删除分支,git 删除分支和回滚的实例详解
  3. 导出mysql excel数据字典_mysql导出 Excel数据字典(全)
  4. 【渝粤教育】广东开放大学 普通话训练 形成性考核 (48)
  5. ps滤镜下载大全-PSCC 64位滤镜收集
  6. 8位数码管动态扫描显示c语言,proteus仿真之8位数码管动态扫描显示试验
  7. iPhone iPad下载NBA2K22苹果版下载
  8. ES3、ES5、ES6继承
  9. 《scikit-learn机器学习实战》简介
  10. 过年了,让你的服务器提高警惕!
  11. 完全掌握Python: 在一门课程中使用 Python 编程所需的一切 | Complete Python Mastery
  12. 转:要使一个人有一颗自由、独立、勇敢的心
  13. Kubernetes--k8s---进阶--管理工具helm--helm全面介绍
  14. kotlin发音!这份字节跳动历年校招Android面试真题解析,附架构师必备技术详解
  15. 【pytorch】torchvision.transforms 图像的变换详解;图像的预处理;数据增强
  16. 100以内的质数(素数)
  17. windows下配置安装 Mycat详细步骤
  18. c++ 数组置0_鸣小亮C语言笔记(5)——数组
  19. 算法面试必备-----贝壳算法面试准备
  20. 将 ICDAR 2015 的 Ground Truth 标注在图像数据上

热门文章

  1. php protected 属性,PHP实现在对象之外访问其私有属性private及保护属性protected的方法...
  2. 全球最大AI巨量模型,参数2457亿炼丹16天最懂中文
  3. SAP PM概念学习
  4. 机器学习面试:这25个实用又有深度的问题
  5. 在数据中心利用AI的5个理由
  6. SAP C/4HANA五朵云
  7. SAP SD 基础知识之定价中的条件技术(Condition Technique in Pricing)
  8. 武汉大学提出ARGAN:注意力循环生成对抗模型用于检测、去除图像阴影 | ICCV 2019
  9. 投资房地产,甘当'接盘侠'才能赚到钱?
  10. 《数学之美》第22章 自然语言处理的教父马库斯和他的优秀弟子们