记一次laravel队列消费问题

Remember a laravel queue consumption problem

Posted by Lv Hui on June 19, 2024

前情提要

公司的项目前段时间被攻击了,用阿里云的克隆实例换到了一台新的服务器,由于休假的原因,我对更换服务器是完全不知情的,后来在有新需求下来的时候才被告知。

出现的问题

项目用的laravel框架,前一段时间有一个新的开发需求,需要对接其他的公司将生成的订单信息推送过去。新功能写完之后,在测试服务器能够正运行,到了正式服务器后发现有一部分订单能够正常推送,其他的一部分就是无法推送,也没有错误信息。由于推送是在原有队列执行的代码里更改的,所以只能去队列定位问题,结果发现并没有无法推送的队列消费记录,任务无故消失了,但是除了新修改的部分队列里的其他的功能都成功执行了,因为数据库里的状态都改变了。

之前从来都没有遇到过这种队列没有消费就丢失的情况,后来测试了很多次,都是会丢失一部分队列。就在我百思不得其解的时候想到了之前他们说换了服务器,由于mysql和redis都没有本地部署,而是用的是阿里云的服务,如果原服务器的队列进程还在的话,会与新服务器的进程同时对队列进行消费,也就导致了队列的“丢失”。去旧的服务器上查看后的确如此,所有的队列进程都在运行,万幸这段时间没有大的改动,否则可能会出现严重的事故。