use*_*986 6 php queue transactions laravel laravel-5.1
有没有办法告诉队列外观不要自动保留推送到队列的内容,直到我专门告诉它为止?
Queue::noPersist()
Queue::push()
Queue::push()
Queue::persist()
Run Code Online (Sandbox Code Playgroud)
看到我的问题如下,我的代码执行被包装在一个事务中。
在该事务中,添加了一些雄辩的记录,并且紧接着将作业推送到队列中。
队列在事务提交之前运行:问题是队列有时在事务完成之前开始运行,因此它尝试引用尚未“提交”的记录。
如果我的设计没问题,我想我真正需要的是队列仅在事务成功提交后提交:可以这么说,如果事务失败,那么作业也应该回滚。或者换句话说,在事务成功之前不应推送作业。
队列延迟我看到 laravel 有一个延迟,我可以添加到队列中,但我不想在那里破解一个随机数,因为这有点脆弱,我真的只想在事务成功时才提交队列。
有什么指导或内置功能可以帮助我解决这个问题吗?
DB::transaction(function() {
// add record A to DB
// add JOB to QUEUE (this job starts firing before transaction commits and fails finding the record A)
// more operations
});
Run Code Online (Sandbox Code Playgroud)
提交发生在你的闭包函数之后,所以如果你继续使用这个结构 - 你将无法在提交后入队。
然而,Laravel 有另一种方式来进行事务(请参阅Laravel 文档中的“手动使用事务” )。你可以这样做:
$errors = false;
try {
DB::beginTransaction();
// All your operations here
} catch (Exception $e) {
$errors = true;
DB::rollBack();
}
if (!$errors) {
DB::commit();
// Add to queue
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7813 次 |
| 最近记录: |