Laravel 11生产环境(Azure App Services+Nginx+PHP8.3)同步事件重复触发问题排查求助
Laravel 11生产环境(Azure App Services+Nginx+PHP8.3)同步事件重复触发问题排查求助
各位好,我这边遇到一个挺头疼的问题:Laravel 11的同步事件在生产环境会重复触发,但本地开发环境完全正常,折腾了好一阵没找到根因,想请大家帮忙分析下可能的原因。
环境配置
- Laravel版本:11.x
- PHP版本:8.3
- Web服务器:Nginx
- 部署环境:Azure App Services,用了两个独立的App Service——一个跑主应用,一个单独跑定时任务(cron)
问题详情
我们触发事件的方式很常规:event(new ApplicationStatusChanged($application));
所有事件和监听器都是同步执行的——既没有给事件或监听器加ShouldQueue,也完全没用到队列。
但现在生产环境里,哪怕是一个单独的POST请求,对应的事件监听器都会执行2次;甚至直接发GET请求做测试,也会出现同样的情况。
我们已经把跑cron的那个App Service完全停掉了,问题还是存在,说明和定时任务完全没关系。
已经排除的可能性
我们已经把能想到的常规排查点都过了一遍,都可以排除:
- 确认事件和监听器都没有实现
ShouldQueue,全程同步,排除队列重试、任务重入的问题 - 检查了监听器的逻辑,没有任何会再次触发该事件的操作
- 排查了请求日志,确认没有重复请求打到接口上(确实是单次请求触发的问题)
- 已经彻底清除了所有缓存:包括配置、路由、事件缓存等,甚至重启过应用服务
- 排除了任务重试或者队列相关的问题(我们根本没用到队列,所以这部分可以完全排除)
想请教大家的问题
- 会不会是Azure App Services的架构、部署副本或者Nginx配置导致的?比如有没有可能多实例或者反向代理的配置问题?
- 为什么这种纯同步的事件会在这种生产架构下重复触发?有没有类似的已知坑点?
- 针对Laravel 11/PHP 8.3的这种情况,有没有什么实用的调试技巧或者容易忽略的细节?比如事件注册的方式有没有什么变化?
内容来源于stack exchange
相关产品推荐
相关产品推荐

