简介
RabbitMQ是用Erlang(我不知道的语言)开发的开源消息队列系统,基于AMQP协议来实现。
AMQP主要特征是面向消息、队列、路由、可靠性、安全。AMQP协议更多用在企业系统内,对数据的一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求其次
MQ(Message Queue)–》消息队列,属于中间件,一般作用于应用程序与应用程序之间,在中间沟通两者,实现消息的传递,这两者直接无需保持联系,两者只需要分别对MQ(Message Queue)消息队列保持联系,各自进行自己的工作,由
MQ(Message Queue)消息队列,进行协调。
MQ(Message Queue)消息队列就相当于一个菜鸟驿站,快递送到菜鸟驿站,快递就存放起来了,直到快递的购买者将快递取走,在这个过程中,购买快递的人和送快递的人没有直接的关联,两者都和菜鸟驿站相关联,菜鸟驿站的出现就将送快递和取快递两者之间的关系进行解耦合,让两者不在紧密的关联在一起,两者分别有着自己的动作行为。
主要功能介绍
1.解耦
传统模式下,两个系统之间的通信大多是两个系统之间的直接关联,属于RPC关联,引入RebbitMQ之后,两者不直接进行关联,而是通过消息队列,进行间接的关联,这样不论是,哪一个应用出现问题,都不会对另外一个应用产生较大影响,实现应用程序之间的解耦
*RPC和消息队列之间的区别与比较
RPC:实现调用远程的方法和调用本地的方法基本一致,异步调用,沟通的两个应用之间可以及时的得到沟通结果,具有强烈的一致性,几乎可以说具有原子性,比较重视业务上的结果
消息队列:两次异步的RPC调用,两个应用和消息队列沟通就做一次RPC,完整的消息队列的使用,至少实现两次RPC,但是消息队列沟通的两个应用之间的消息传递不是实时的,在消息队列中,会在适合的时机对消息进行生产和消费(错峰流控)
2.异步提升效率
可以将一条业务链上的不是必须的业务进行异步处理,来缩短业务的时间,传统的,例如发送短信和发送邮件,这中放在业务链中如果使用串行处理的话,会增加业务的时间,如果是并行处理的话,可以相对的减少业务的处理时间,但这种处理并不是核心的业务,而是对用户的通知,可以进行拿出来做异步处理
3.流量削峰
当访问系统的流量很高时,会给服务器或者数据库产生一定的访问压力,这时候,服务器或者数据库就会出现崩溃的情况,采用MQ,将访问的消息全部推送到消息队列中,当高峰过后,然后应用再去消费被积压在消息队列中的访问请求,从而实现流量削峰