消息代理框架一般是异步的,一个线程send,另外一个线程recv。
RPC一般用于同步场景
ActiveMQ,RabbitMQ是流行的消息队列(消息中间件),消息队列一般用于异步场景
消息队列最容易理解的方式就是生产者消费者模式,使两个应用解耦。mq等框架就是对这的具体实现。
rpc中主要有两点,一是消息的传输格式(文本或二进制),二是消息传输方式(http或tcp)。有的框架是对前者实现,如probuffer,有的是对后面实现,如netty,还有的就是一个整体实现,如thrift。
不管怎样,他们都是为了实现通信。
消息代理,又称消息队列,是面向队列的,主要维护客户端和服务端之间的消息,因此往往会有独立消息中间件,有的消息队列也会实现消息持久化,掉电不丢失。
RPC框架也是有消息队列的,只不过你不用管消息队列这些东西,你只管调用就好。
如果你的业务包颗粒比较小,比如就是取出一个数据,那么用RPC就好。
如果你业务包颗粒比较大,比如完成一个订单业务,操作复杂,耗时较长,那么可以把这个业务存到消息队列中间件。
一,消息队列服务一般用于设计多系统之间的信息传输,一般这种传输不需要对方对数据做出回应。它最常见的方式是构建异步的生产者-消费者模式。我们在系统开发中,有些业务并不需要及时返回结果,我们可以把这些操作放到队列中,然后另起一个消费者去处理它。比如日志,数据库异步更新。
二,rpc一般是用于服务器与服务器进程之间通信,这种通信有请求和应答。它是建立在底层的socket通信之上的。封装为rpc之后,更加方便建立通信。就像在同一个进程中调用对方的方法一样。它本地的方法名一般和请求到达的服务器的方法名一一对应。这样可以更好的把模块划分。所以它是应对分布式而生的。比如一个网站,一开始可能所有的服务在一个进程中,但是随着业务的增长,一个进程处理不过来,这时就需要把业务拆分成多个,分部到不同的机器上去。