消息代理 與 RPC框架 有什麼區別和聯繫?

我了解一下protocol buffer ,ThriftRPC框架 和 ActiveMQ,RabbitMQ消息代理框架, 有點弄不清它們的應用場景 和 它們之間的聯繫與區別。 望 大家 指點迷津! 謝謝!


總的來說,消息代理和RPC框架就像ReadFileEx和ReadFile的區別


就是個消息池,不固化消息形式,你用什麼協議取,消息池就返回給你什麼樣的數據形式,這樣不同系統間就可以無縫通信了


MQ 是生產者消費者模式。
RPC 是請求響應模式。
MQ 是面向數據的。
RPC 是面向動作的。

protocol buffer 只是一個序列化方式,並不是 RPC。


rpc讓你遠程調用象本地調用,一般是同步的,例如,你讀一個文件,象調用本地的函數,就是時間久點。
消息代理框架一般是非同步的,一個線程send,另外一個線程recv
pb只是協議包裝,thrift才是真正的rpc框架


protool buffer 是一種序列化方式,google開源的gPRC則是一個基於Protocol Buffers序列化的RPC框架,Thrift也是個RPC框架 ,這兩個都是跨平台RPC框架
RPC一般用於同步場景
ActiveMQ,RabbitMQ是流行的消息隊列(消息中間件),消息隊列一般用於非同步場景


最大的區別是,rpc沒有broker, 而消息隊列是需要管理消息的存儲的,rpc沒有存儲,只有通信。


protocol buffer 是二進位序列化方式,類似json(文本)
,題主說的應該是grpc吧

主要的區別就是消息隊列適用於非同步場景,而rpc是遠程同步調用

就像你去餐廳吃飯,
消息隊列:不急不急,來了先放碗里,我和朋友聊著,有空在吃~
rpc:快點啊!我等了好久了- -


不管是消息隊列還是rpc調用都是 分散式下面的 通信方式。
消息隊列最容易理解的方式就是生產者消費者模式,使兩個應用解耦。mq等框架就是對這的具體實現。
rpc中主要有兩點,一是消息的傳輸格式(文本或二進位),二是消息傳輸方式(http或tcp)。有的框架是對前者實現,如probuffer,有的是對後面實現,如netty,還有的就是一個整體實現,如thrift。
不管怎樣,他們都是為了實現通信。


消息隊列是系統級、模塊級的通信。RPC是對象級、函數級通信。


推薦閱讀:

Chrome 有哪些鮮為人知的用法?
都有哪些較好用的項目管理軟體?
大家怎麼看待易語言這種語言的發展前景?
最流氓的軟體可以流氓到什麼程度?
Mike軟體如何學習?

TAG:軟體 | 計算機 | 計算機科學 | 消息隊列 | 遠程過程調用協議RPCRemoteProcedureCallProtocol |