1、作用
异步处理:减少请求等待
服务解耦:多个服务间减低依赖
流量削峰:请求放入队列,作为缓存,减少高并发的巨多请求的影响
2、模式
队列模型:RabbitMQ
一条消息只能被一个消费者消费
发布/订阅模型: kafka、rocketMQ
一条消息被多个消费者消费,消息发到topic,谁要谁订阅
3、确保消息不丢失
4、消息重复消费
前置条件判断、版本号控制、数据库的约束:唯一键/关键字段
5、消息有序
全局有序:不常见
一个生产者(producer)生产消息、消息服务端(broker)一个队列(分区)、一个消费者(cosumer)单线程消费消息
部分有序:常见
将Topic
内部划分成我们需要的队列数,把消息通过特定的策略发往固定的队列中,然后每个队列
对应一个单线程处理的消费者。
这样即完成了部分有序的需求,又可以通过队列数量的并发来提高消息处理效率。
6、消息堆积
生产者的生产速度与消费者的消费速度不匹配。
1)优化消费逻辑
2)水平扩容,增加Topic
的队列数和消费者数量,注意队列数一定要增加,不然新增加的消费者是
没东西消费的。
一个Topic中,一个队列只会分配给一个消费者。