介绍
2007 年发布,是一个在 AMQP(高级消息队列协议)基础上完成的,是当前最主流的消息中间件之一。
RabbitMQ是一个由erlang语言开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,由于erlang 语言的高并发特性,性能较好,本质是个队列,FIFO 先入先出,里面存放的内容是message。
RabbitMQ 是一个消息中间件:它接收消息并且转发,就类似于一个快递站,卖家把快递通过快递站,送到我们的手上,MQ也是这样,接收并存储消息,再转发。
应用解耦
以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。
当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,拉取中间件的消息即可,中间用户感受不到物流系统的故障,提升系统的可用性。
异步调用提速
如下图所示,异步调用比起同步调用减少了响应时间。
削峰填谷
利用mq的缓冲功能,将瞬时的大量的请求缓存到mq中,分批消费,减少服务器压力。
用户卡顿
但是由于是队列的结构,先到的请求先消费,用户感知不明显,但是后到的请求就会让用户感觉卡顿
消息中间件的劣势
最好使用集群解决可用性问题
常用的mq产品
rabbitmq的消息几乎可以做到不丢失,可靠性很高,适合用于金融领域中。
kafka常用于大数据领域的日志收集,可能会丢失消息。
以上图片来自图灵课堂中的白起老师的rabbitmq的网课截图。