这个方案相对于我上一篇的可靠性投递方案少了一个入库操作,更适用高并发场景,具体执行流程如下:
- 1.UpstreamService先投递一个消息到MQ Broker,业务服务模块进行消息监听,监听到消息后进行业务处理,处理完成,投递一个确认消息到MQ
Broker,由一个CallbackService服务进行确认消息的监听,监听到确认消息对消息进行入库操作。 - 2.UpstreamService再投递一个延迟消息(在第一个消息投递之后3或5分钟之后操作)到MQ Broker,CallbackService监听这个延迟消息,监听到延迟消息之后去库里验证该消息是否已经入库并且被消费,如果消息被消费,则什么操作都不做,如果没有找到消息,则发送命令到UpstreamService,让其重新发送消息,之后重复之前的操作。