RPC和MQ有什么区别?

Posted 然酱闲聊的地方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RPC和MQ有什么区别?相关的知识,希望对你有一定的参考价值。

近期有同事提出了这个问题,分布式系统当中,MQ和RPC是最常用的两个系统间交互的方式。

自己简单分析和整理了一下思路。


    先基于假设,讨论的对象是指信息的传递不强依赖获取的结果的场景,例如 getUserByUserId() 这样的单纯获取信息式的请求,则不在讨论的范围内,因为这类请求并不是MQ能够解决的问题。而是对比 createOrderByParam() 和 CreateOrderRequestEvent 这样的写入式请求的传递,在两个方式中的区别。


以下开始正式讨论






本质上,RPC和Message 都是在传递信息。


    先从为什么需要传递信息?自然是因为不同的系统之间,有去传递信息的需求。比如一个计价系统,需要去优惠券系统当中拿用户所有优惠券来计算价格,抑或是订单状态发生变化之后,库存系统需要得知这个“事件”的发生,来做相应的调整。

    既然有了需求,那就需要去传递信息。那我们在决策采用哪一种方式来传递信息的时候,都在想些什么?我觉得可以从 站在信息的发起方和信息的接收方来说,都在关注些什么作为出发点。站在信息的发起方和信息的接收方,关注点的不一样,是会影响信息本身的性质的。


    发起方角度来看,可以分为 “我希望A能够收到我的信息” 和 “有一个人希望收到我的信息” 两类。两者的区别是,我知不知道到底是什么在接受我的信息,直接影响到了消息发起方发起消息的强弱之分。那从消息的强弱来看,似乎可以简单的决策 强信息传递 走RPC, 弱信息传递 走 MQ?

    那站在信息的接收方来看呢? 我觉得可以分为 “我需要知道他的变化,来做出相应的调整” 和 “我在等待一个信息来让我做一件事情” 

    感觉对信息的接收方来说,可以分为 “通知” 和 “命令”。

    由此,大概可以得出表格: 





RPC:


Message Queue:



以上是关于RPC和MQ有什么区别?的主要内容,如果未能解决你的问题,请参考以下文章

分布式服务(RPC)+分布式消息队列(MQ)面试题精选

jboss.jms 和 jboss.mq 有啥区别?

Amazon MQ 和 SQS 有啥区别?

MQ与webservice的区别,MQ的区别

RPC 和浏览器/服务器有啥区别?

RPC 调用和 HTTP 调用的区别