我了解一下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是流行的消息隊列(消息中間件),消息隊列一般用於異步場景
protocol buffer 是二進制序列化方式,類似json(文本),題主說的應該是grpc吧
主要的區別就是消息隊列適用於異步場景,而rpc是遠程同步調用
就像你去餐廳吃飯,
消息隊列:不急不急,來了先放碗里,我和朋友聊着,有空在吃~
rpc:快點啊!我等了好久了- -
最大的區別是,rpc沒有broker, 而消息隊列是需要管理消息的存儲的,rpc沒有存儲,只有通信。
不管是消息隊列還是rpc調用都是 分布式下面的 通信方式。
消息隊列最容易理解的方式就是生產者消費者模式,使兩個應用解耦。mq等框架就是對這的具體實現。
rpc中主要有兩點,一是消息的傳輸格式(文本或二進制),二是消息傳輸方式(http或tcp)。有的框架是對前者實現,如probuffer,有的是對后面實現,如netty,還有的就是一個整體實現,如thrift。
不管怎樣,他們都是為了實現通信。
消息隊列是系統級、模塊級的通信。RPC是對象級、函數級通信。