消息队列(MQ)
简介:MQ(Message Queue)消息队列就是保存消息的容器,是一个高性能的中间件,应用在异步解耦异步处理、削峰填谷日志处理。
1. 特点
A. 先进先出(FIFO);
B. 发布订阅;
C. 持久化;
D. 分布式部署。
2. 分类
获取消息方式:A. push(推)方式:优点——可以尽可能快地将消息发送给消费者,缺点——如果消费者处理能力跟不上,消费者的缓冲区可能会溢出;
B. pull(拉)方式:优点——消费端可以按处理能力进行拉去,缺点——会增加消息延迟;
能否重复消费:A. 点对点(Queue):不可重复消费;
B. 发布/订阅(Topic):可重复消费。
3. 技术组件
A. RabbitMQ:使用Erlang语言开发的开源消息队列系统,基于AMQP协议实现的,支持推拉模式和事务,适合对数据的一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求在其次的场景,吞吐量5.95w/s;
B. RocketMQ:纯Java开发,是阿里开源的消息中间件,支持推拉模式,可以保证消息顺序,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点,吞吐量11.6w/s;
C. Kafka:是LinkedIn开源的分布式发布-订阅消息系统,主要特点是基于拉模式来处理消息消费,高吞吐量,适合产生大量数据的互联网服务的数据收集业务日志收集和传输,吞吐量17.3w/s;
D. ActiveMQ:纯Java实现,兼容JMS,可以内嵌于Java应用中,是最受欢迎和功能强大的开源消息传递服务器;
E. Redis队列:采用list数据类型实现拉模式,采用lpush/rpush和rpop/lpop实现,阻塞等待采用brpop/blpop命令;
F. ZeroMQ:号称最快的消息队列系统,能够实现高级、复杂的队列。