消息队列(MQ)是一种系统间相互写作的通信机制,目前业界通常由两种方式来实现系统间通信,其中一种是基于远程过程调用的方式;另一种是基于消息队列的方式。前一种就是我们常说的RPC调用,
客户端不需要知道调用的具体实现细节,只需要调用实际存在于远程计算机上的某个对象即可,但调用方式看起来和调用本地应用程序中的对象一样。基于消息队列的方式是指由应用中的某个系统负责发送消息,由关心这条消息的相应系统负责接收消息,并在收到消息后进行各自系统内的业务处理,消息可以非常简单,比如只包含文本字符串;也可以很复杂,比如包含字节流、字节数组,还可能包含嵌入对象,消息在被发送后可以立即返回,由消息队列来负责消息的传递,消息发布者只管将消息发布到消息队列而不用管谁来去,消息使用者只管从消息队列中取消息而不管是谁发布的,这样发布者和使用者都不用知道对方的存在
1.解耦。多个业务系统间的解耦,使得单个业务系统更加独立
2.异步。对于一些业务上实时性要求不高的处理,可以转为异步处理
3.削峰。对于某个时间段的高并发流量可以进行固定速率进行处理
4.数据一致性。事务消息可以帮我们更好的实现分布式事务
1.RPC虽然可以分为同步调用和异步调用,但在大多数情况下,
RPC请求发出时是需要获取最终的调用结果的,需要结果进行回传
2.MQ虽然也可以实现分布式系统之间的调用,但是MQ回传被调用方的处理结果给调用方是,
这个操作是比较困难的,不是很容易实现
3.RPC需要提前知道远程服务的路由消息,而对于MQ来说,不需要知道消费者的路由消息