1、RabbitMQ的概述笔记
一、什么是RabbitMQ
Rabbit是一个公司名.MQ(nessage queue) 消息队列的意思,RabbitMQ 是 Rabbit企业下的一个消息队列产品。
协议,提供统一消息服务的协议,为面向消息的中间件设计。基于此协议的客户端与消息中间
件可传递消息,并不受客户端或中间件,开发语言等条件的限制。
二、MQ是什么
MQ(Message queue) 从字面意思上看,本质是一个队列 先进先出,队列中存放的是消息(message)而已.消息可以非常简单,比如文本字符串 JSON等,也可以是很复杂的内嵌对象
MQ常常用户分布式系统之间进行通信
两种方式:
1.同步通信
数据从一段发出就立即可以到达另一端
2.异步通信
数据从一段发出,先进入一个容器中进行临时存储,当到达某种条件,在由这个容器发送给另一端
容器的一个具体实现就是MQ(message)
三、MQ的作用
MQ主要工作是接收并转发消息,在不同的应用场景下可以展现不同作用
举一个例子,可以将MQ想象成一个仓库,采购部门进货之后,把零件放入仓库中,生产部门从仓库中取出零件并加工成产品,MQ和仓库的区别是,仓库中存放的是物品,MQ中存放的是消息。仓库负责存放物品并转发物品,MQ负责存放消息和消息的转发。
1、异步解耦:
在业务流程中,一些操作可能非常耗时,但并不需要即时返回结果.可以借助MQ把这些操作异步化,比如用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作
完成后才通知用户注册成功。
2、流量削峰
当面对访问量突然激增的情况时,确保应用程序依然能够稳定运行是至关重要的。然而,如果为了应对这种不常见的流量峰值而配置充足的资源,则可能导致资源的极大浪费。使用消息队列(Message Queue, MQ)是一个有效的解决方案,它可以帮助关键系统组件承受突发的访问压力,避免因瞬间高流量导致的系统崩溃。例如,在进行秒杀活动或促销推广时,可以通过MQ来管理涌入的请求。具体来说,MQ可以将这些请求加入队列中,而不是直接对后端系统造成冲击。系统随后依据自身的处理能力,逐步处理这些排队的请求。这种方法不仅保护了系统免受瞬时高负载的影响,还使得资源利用更加高效合理。
3、消息分发
当多个系统需要对同一数据进行响应时,采用消息队列(Message Queue, MQ)来进行消息分发是一个理想的选择。例如,在支付成功后,支付系统可以将这一事件作为消息发送到消息队列中。其他相关的系统则订阅这个消息队列,一旦有新的消息到达,这些系统就能立即得到通知并作出相应的处理。这种方式避免了各个系统通过定时轮询数据库的方式来检查是否有更新,从而减少了数据库的压力和系统的复杂性。
4、延迟通知
在需要于特定时间后发送通知的场景中,利用消息队列(Message Queue, MQ)的延迟消息功能是一种非常有效的解决方案。例如,在电子商务平台中,如果用户下单之后在一定时间内没有完成支付,系统可以使用MQ的延迟队列功能来设置一个自动取消订单的任务。
四、主流的MQ
1. Kafka
Apache Kafka 最初由LinkedIn开发,并于2011年开源。它的设计初衷确实是为了处理大规模的日志数据传输问题,但是它的应用范围远远超出了日志收集。Kafka是一个分布式的流处理平台,它能够提供高吞吐量、可持久化的消息队列服务。它不仅支持传统的发布/订阅模式的消息传递,还提供了复杂的流处理功能。
2.RabbitMQ
采用Erlang语言开发,MQ功能比较完备,且几乎支持所有主流语言,开源提供的界面也非常友好,性 能较好,吞吐量能达到万级,社区活跃度也比较高,比较适合中小型公司,数据量没那么大,且并发没 那么高的场景.