富贵资源网 Design By www.hznty.com
一、报错: 「Can't swap PDO instance while within transaction」
通过查询 Laravel 源代码,可以确认异常是在 setPdo
方法中抛出的:
<" Can't swap PDO instance while within transaction. "); } $this->pdo = $pdo; return $this; } "color: #ff0000">二、报错:「Cannot delete job: NOT_FOUND」此问题实际上和 Laravel 没太大关系,而是队列服务 Beanstalk 导致的。
要解决这个问题,需要先理解一个消息的生命周期:当一个消息被放入队列的时候,它就进入了
READY
状态,与此同时,它会关联一个TTR(time to run)
计时器,表示此消息允许运行的时间,当此消息被消费时,它就进入了RESERVED
状态,消费完后,此消息就会被删除,如果消费的时间过长,比TTR
还长,那么系统会认为认为此消费者已经挂了,进而会把消息从RESERVED
状态退回到READY
状态,交给另一个消费者重新处理。于是乎同一个消息可能会被多个消费者处理,第一个处理完的消费者可以正常的删除消息,而其余的消费者在删除消息的时候就会报无法删除的错误。
解决方法很简单,首先,需要确保
TTR
的设置不能太小;其次,实际上Beanstalk
提供了一个专门的touch
命令来解决执行时间过长的问题,此外,有些时候我们可能需要在应用层面上通过加锁来规避同一个消息被多个消费者同时处理的情况。三、报错:「No query results for model」
在激活了 Laravel 读写分离的前提下,当消费者处理消息的时候,可能会收到类似错误。一个有潜在问题的队列命令大概如下所示:
<"htmlcode"><"htmlcode"><"htmlcode"><"color: #ff0000">四、总结以上就是我在使用Laravel遇到的几个有代表性的报错以及解决方案,如果有问题欢迎大家一起交流。希望这篇文章对大家的学习或者工作能带来一定的帮助。
富贵资源网 Design By www.hznty.com广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!富贵资源网 Design By www.hznty.com暂无评论...