消息队列总述
一、为什么要用消息队列
解耦、削峰、异步
二、使用消息队列会带来什么问题
1、系统的可用性降低。消息队列一旦崩溃,所有相关业务都无法运行。因此必须保证消息队列的高可用;
2、系统的复杂性降低。引入消息队列之后需要考虑消息的可靠传输问题、消息的重复消费问题、数据的一致性问题等;
三、如何保证消息队列的高可用
构建集群(主从模式、ZooKeeper)
四、如何保证消息不被重复消费
1、消息被消费完成后需要有确认机制
2、在不同业务场景中设计方法避免重复消息
(1)拿到消息做数据库insert操作时,给消息做唯一的主键,若是重复消息会造成主键冲突,避免了脏数据;
(2)使用redis中的set来存储消息数据;
五、如何保证消息的可靠传输
1、生产者弄丢数据
(1)使用事务
(2)confirm模式
2、消息队列弄丢数据
持久化
3、消费者弄丢数据
手动确认消息