[高级消息队列] 消息队列基本知识笔记
1.消息队列的应用场景
消息队列是生产者-消费者模型。
解耦,避免各种系统之间进行复杂的调用,所有系统只需要向消息队列推入消息和获取消息即可。(试想若n个微服务间互相调用,需要(n*(n-1))/2种不同连接,每一种都需要进行一次编码……)
异步,将非必要业务逻辑异步允许,加快响应速度。例如避免微服务间顺序调用以及达到非阻塞式调用的目的。
削峰,缓存请求数量,避免高峰期时对服务或数据库产生影响。(漏桶算法和令牌桶算法)
2.四种常见高级消息队列组件对比
特性 | ActiveMQ | RabbitMQ | RocketMQ | Kafka |
开发语言 | Java | Erlang | Java | Scala |
单机吞吐量 | 万级 | 万级 | 十万级 | 十万级 |
时效性 | ms级 | us级 | ms级 | ms级以内 |
可用性及架构 | 高、主从架构 | 高、主从架构 | 极高、分布式架构 | 极高、分布式架构 |
功能特性 | 较成熟 |
并发性能强, 管理界面完善 |
扩展性强 |
为大数据领域准备, 无一些额外功能,如 消息查询和回溯 |
3.消息队列需要考虑的问题
1)高可用性,保证消息数量增加时系统的可用性,策略是按业务需要选择集群模式。
2)保证消息不被重复消费。
3)保证消息传输可靠性(即不丢失消息)。
4)保证消息顺序性,尤其是在分布式架构下保证获取到的消息顺序不变化。