一.RabbitMQ发送与消费消息的模型
二.消息丢失的几种情况
1.生产者发送消息未到交换机
2.消息到达交换机,没有正确路由到队列
3.MQ宕机,队列中的消息不见了
4.消费者收到消息,还没消费,消费者宕机
三.如何保证消息不丢失
1.消息的重要性
不重要的消息可以丢,重要的信息,跟事务数据一致性相关的信息,不能丢
2.解决方法
1.创建交换机,队列,消息进行持久化
2.生产者确认机制
1.开启消息发送失败的重试策略:设置重试次数和重试间隔比例,耗尽重试次数后,依旧失败,记录失败消息到数据库失败消息表,用于后期执行补偿错误。如使用定时任务去扫描这个表,重新发送消息
2.开启 confirm 机制:开启 confirm 机制,返回ack,正确到达,返回nack,没有到达交换机,写入数据库,后期重试
3.开启 return 机制:保证消息正确到达队列,没有到达队列,会调用ReturnCallback,写入数据库,后期重试
3.消费者ack机制
1.开启手动ack,让消费者消费成功后,手动提交,使用Redis来记录消费失败的次数,如果到达阈值,则记录到数据库,后期使用人工干预
2.自动ack + 重试耗尽的失败策略,定义错误交换机队列,后期通过人工进行干预