一、消息如何保障100%的投递成功
1、什么是生成端的可靠性投递
保障消息的成功发出
保障MQ节点的成功接收
发送端收到MQ节点(Broker)确认应答
完善的消息进行补偿机制
方案1: 消息信息入库,对消息状态进行标记
BIZ DB: 业务DB
MSG DB: 消息DB
这两个DB可以放在一个DB里。
Step1 记录要发送的消息到MSG DB,标记消息状态为0
Step2: 向MQ发送消息
Step3: MQ异步发送确认消息到生产者
Step4: 生产者接受到确认消息,将消息标记为1,代表该消息已经确认过了。
Stop5: 抓取状态为0(未确认的)的消息(超过5分钟的消息)
Stop6: 重新发送消息
Step7: 重试次数超过3次, 状态改为2,代表重试出错。这个是极端情况,可以人工处理。如果是业务逻辑错误,则修改业务逻辑。
缺点: 不适合高并发场景,对消息进行入口,更新消息,增加了IO负担。
方案2: 消息的延迟投递,做二次确认,回调检查
1.发送消息(生成两条消息 第一条真实消息,第二条消息,延迟确认的消息,可能延迟消息可能会在第2分钟或者第三分钟后发送)
2.broker接收消息
3.监听的消费端接收消息
4.消费端处理完消息之后,发送一个确认消息到broker
5.监听确认消息的消息队列,接收确认消息,Callback服务接收到,存储到数据库
6.延迟投递的消息发送了,被Check Detail监听到,Callback服务接收到,检查数据库是否存储
7.检查到没有储存,重发该消息,ReSend一次这个消息
8.重走该流程
作者:Work Hard Work Smart
出处:http://www.cnblogs.com/linlf03/
欢迎任何形式的转载,未经作者同意,请保留此段声明!