文章目录
MQ
MQ应用场景
- 异步发送(验证码、短信、邮件)
- 数据同步
- 削峰填谷
- 分布式事务
消息不丢失(RabbitMQ/Kafka)
为什么RabbitMQ会丢失消息呢?
三种可能
- 当生产者发送消息时,消息可能达不到交换机或队列
- 当消费者接收消息时,因为服务宕机、网络问题可能接收不到消息
- 当队列存放消息时,服务宕机有可能会丢失消息
三种大致解决方式
-
生产者确认机制
-
RabbitMQ提供了
publisher confirm
机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功 -
失败处理
- 首先回调方法即时重发
- 记录日志
- 重发失败,保存到数据库定时重发,成功发送后即刻删除表中数据
-
-
消息持久化
-
消费者确认
- 消费者处理消息后可以向MQ发送ack回执ÿ