什么是消息队列?
Message Queue 消息队列,简称 MQ。
队列是一种先进先出的数据结构,而消息队列就是把要传输的数据放在队列中。一般把数据放到消息队列叫生产者,而把从消息队列里取数据叫消费者。
目前常见的消息队列中间件有ActiveMQ、RabbitMQ、ZeroMQ、Kafka、MetaMQ、RocketMQ等。
消息队列解决了什么问题?
- 异步通信
消息队列提供了异步处理机制,允许用户把一个消息放入队列但不立刻处理它,想向队列中放入多少消息就放多少,然后在需要的时候再去处理它们。
- 解耦
假设有A系统发送数据到BCD,在使用MQ的情况下,A的数据发到MQ里去,BCD系统自己去MQ里消费。A不关心BCD系统的状况,也不关心数据被谁消费,这样A与BCD就解耦。
- 削锋/限流
秒杀、团抢活动可能会导致流量暴增,导致系统崩溃。假设引入消息队列,用户的请求,服务器接收后写入消息队列(假如消息队列长度超过最大数量,则直接抛弃用户请求跳转到错误页面),而秒杀业务根据消息队列中的请求信息,再做后续处理。这样就算是高峰时期,系统也不会崩溃,由于消费远小于生产,因此会导致几十万甚至几百万的请求积压在MQ中。
消息队列怎么被消费?
- 主动消费:生产者将数据放到消息队列中,主动叫消费者去拿(push)
- 轮询消费:消费者不断轮询消息队列,看看有没有新数据,有的话就消费(pull)
参考:https://www.zhihu.com/question/34243607、https://www.zhihu.com/question/54152397、https://blog.csdn.net/h2604396739/article/details/81136527、https://blog.csdn.net/qq_30764991/article/details/80239076