概述
- 为什么要使用消息队列?
- 使用了消息队列会有什么缺点?
- 消息队列如何选型?
- 如何保证消息队列是高可用的?
- 如何保证消息不被重复消费?
- 如何保证消费的可靠性传输?
- 如何保证消息的顺序性?
为什么要使用消息队列
解耦
异步
削峰
使用了消息队列会有什么缺点
系统可用性降低
系统复杂性增加
消息队列如何选型
中小型软件公司,建议选RabbitMQ
大型软件公司,根据具体使用在rocketMq和kafka之间二选一
如何保证消息队列是高可用的
消息队列的集群模式
如何保证消息不被重复消费 or 如何保证消息队列的幂等性
原因:
网络传输等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将该消息分发给其他的消费者
如何保证消费的可靠性传输
其实这个可靠性传输,每种MQ都要从三个角度来分析:生产者弄丢数据、消息队列弄丢数据、消费者弄丢数据
生产者
发送数据,开启事务
消息队列
持久化数据之后再向生产者确认
消费者
消费成功之后确认消息,不要采用自动确认的消息模式
如何保证消息的顺序性
通过某种算法,将需要保持先后顺序的消息放到同一个消息队列中(kafka中就是partition,rabbitMq中就是queue)。然后只用一个消费者去消费该队列。
保证入队有序就行,出队以后的顺序交给消费者自己去保证,没有固定套路