首先,这几个概念本就不是同一层次上的东西,自己风马牛不相及。编程
先说RPC
RPC一般指的是PRC框架(分布式框架),或者PRC协议,如GRPC,JSON-RPC等。这类框架主要解决远程通讯间的问题,因此底层的通讯机制是不须要使用者去关心去实现就能很好实现远程通讯的,最出名的莫过于阿里的dubbo。后端
再说任务队列
这是个逻辑概念,即好比饭店高峰期时,顾客单子不得不按照下单顺序一个个放在厨房,进行前后炒菜处理,这一堆的单子就是任务队列。架构
最后说消息队列
消息队列(MQ)能够理解成两个应用程序间(生产者消费者间)的通讯,例如短信发送模块,由于模块的发送速度跟不上,这时候须要有一个容器,暂存一下,缓解下压力,那么“消息队列”就是在消息的传输过程当中保存消息的“容器”。而后短信模块就能够从容不怕的去消息队列取出要发出的短信内容,进行发送处理。框架
说实话,第一次看到这个问题,真心有点儿晕。在工做中,任务队列,消息队列和rpc都是经常使用的实践方案,可是这三者解决的问题彷佛没有什么相关性。如:任务队列每每是须要大规模处理业务逻辑时,将相关的任务入队列,进行异步调用,从而解决任务阻塞的问题;消息队列是异构系统(或者说系统)之间异步通讯的一种方法,主要是用来解决系统间信息同步问题的;而rpc是一种远程调用方式,是在代码的实现层面异步调用外部服务用的。就这种描述来看,三者之间的确没有什么瓜葛。异步
可是出于好奇,我在网上搜索了这个问题,发现知乎有相同的问题,而且有大神【灵剑】给出了比较专业的答案,我将其答案描述以下。分布式
任务队列、消息队列、rpc是不一样层次上的东西,任务队列是逻辑模型,消息队列是通讯模型,RPC是包含了通讯模型的编程模型(或者框架)。学习
消息队列(MQ)是一种能实现生产者到消费者单向通讯的通讯模型,通常来讲是指实现这个模型的中间件,好比RabbitMQ。它能够是一个产品,或者是操做系统提供的一种服务之类。操作系统
RPC通常来讲是具体指某一种RPC编程框架或协议,如JSON-RPC、GRPC等,它本身有一整套通讯的规范,而在此之上实现什么功能是能够定制的。对于RPC来讲,调用方不太关心底层的通讯机制,只关心它能实现远程调用这一点;框架则不太关心上面承载的到底是怎样的应用,只负责将调用过程发送到执行端,并将结果回传。中间件
任务队列则是个逻辑上的概念,即将抽象的任务发送到执行的worker的组件,有的时候包含了后端的worker,有的时候不包含,并无什么具体的形式,也没有什么规范。blog
这三者并无特别大的联系,但也不必定是彻底不一样的东西,好比说RPC能够经过MQ来实现,而任务队列能够经过MQ实现,也能够利用RPC实现,底层可能都是相同的东西,可是由于暴露出了不一样性质的接口因此也换了不一样的名字。以上的区分也不绝对,不少状况下只是怎么方便就怎么叫。
任务队列是逻辑模型,消息队列是通讯模型,RPC是包含了通讯模型的编程模型(或者框架),概念清晰,颇有归纳性,这个答案值得读,也值得了解和学习。尤为是底层的东西多是相同的,可是封装以后对于提供的接口和功能起不一样的名字,更是软件开发中的广泛现象。
群内提供免费的Java架构学习资料,QQ群:643459718