消息队列的一些基本总结

什么是消息队列

消息队列常常指代的是消息中间件

消息队列的用处

随着业务不断扩张,用来异步处理,服务解耦,流量控制
异步处理:调用链路长,响应慢,为了减少请求的等待,还能让服务异步并发处理,提升系统总体性能
服务解耦:解决系统之间的耦合问题,避免互相影响
流量控制:流量洪峰的削峰,有一些服务特别是某些后台任务,不需要及时地响应,并且业务处理复杂且流程长,那么过来的请求先放入消息队列中,后端服务按照自己的节奏处理

PS:多引入一个中间件系统的稳定性就下降一层,运维的难度抬高一层。因此要权衡利弊,系统是演进的

基本模型

队列模型

生产者往某个队列里面发送消息,一个队列可以存储多个生产者的消息,一个队列也可以有多个消费者,但是消费者之间是竞争关系,即每条消息只能被一个消费者消费。
1

发布/订阅模型

该模型是将消息发往一个Topic 即主题中,所有订阅了这个 Topic 的订阅者都能消费这条消息
1

区别

队列模型每条消息只能被一个消费者消费,而发布/订阅模型就是为让一条消息可以被多个消费者消费而生的,当然队列模型也可以通过消息全量存储至多个队列来解决一条消息被多个消费者消费问题,但是会有数据的冗余。
发布/订阅模型兼容队列模型,即只有一个消费者的情况下和队列模型基本一致。
RabbitMQ 采用队列模型, RocketMQ 和 Kafka 采用发布/订阅模型。