我了解一下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是对象级、函数级通信。