消息队列常见场景
异步解耦
削峰填谷
日志收集分析
代替事务,最终一致
消息队列特点
消息队列之所以能异步,就是因为消息并不是实时处理的,那肯定会有一个存储消息,处理消息的地方,才能达到异步效果。
所以最简单的消息队列由以下三块组成:
消息生产者,消息处理中心,消息消费者。
1.消息堆积有处理策略
当生产者生产消息的速度大于消费者消费消息的速度时,消息就会在消息中心产生堆积。
所以消息队列必须能够处理这种情况,防止消息中心无限堆积。
一般会给消息队列设置一个阈值,超过阈值消息将不进入消息中心,防止整个消息中心挂掉。
这个思想和我们平时说的网络限流是一样的。比如微博一旦访问量过大,超过他们所设定的阈值,一部分人就会受到影响,甚至访问不了微博,但有些人却几乎没有影响。
2.消息应该持久化
异步消息的存储,绝对不是简单的内存存储,否则一旦断电或重启,消息就都没有了,所以消息队列一定会对消息做持久化操作,比如存在文件中。
这个和redis的持久化大同小异,内存不可靠就持久化,要么到本地文件,要么存入数据库。
3.消息应该是可靠的
消息的可靠是指:生产者生产的消息,应该可靠的被持久化保存,并被消费者消费掉。
站在生产者的角度,消息一旦发出去,就必须被消费。
4.消息不能重复消费
虽然很多消息消费者都做了消息的幂等操作,即保证即使重复的消息也不会影响消息的结果。
但是作为消息队列来说,应该是不能出现消息重复的。
所以站在消息中心的角度来看,必须要有可靠的技术手段来保证消息不被重复消费。
5.消息是有序的
这点很容易理解,某些业务场景下,消息必须是有序的。
先发出的消息,就应该先被消费。
6.支持集群
消息队列的高可用,防止单点故障,增加吞吐量,就必须要支持集群模式。