使用tp/queue::later时的奇妙问题
anlondon Lv6
配置
  • php 7.19
  • thinkphp 5
  • fastadmin 2.0
  • topthink/think-queue 1.1.6
问题

在弄项目时,遇到一个神奇的问题,明明sql语句没有问题,调试运行都没有问题,但是在程序完整执行后,数据库并没有变化。

解决

因为sql语句是写在事务闭包内的,本以为是事务导致的。
但是逐句排查后,发现是queque队列执行了【设定的取消程序】导致的。

1
2
$close_minue = 1440;
\think\Queue::later(($close_minue * 60), '\addons\shopro\job\OrderAutoOper@autoClose', ['order' => $order], 'shopro');

上述代码,目的是一天后用户没有支付,则自动关闭订单,写法没有错误。

但是因为queue设置里为Sync选项,默认同步执行,

1
2
3
4
5
6
class Sync extends Connector{

public function later($delay, $job, $data = '', $queue = null)
{
return $this->push($job, $data, $queue);
}

可见,sync同步队列里并没有使用设定的时间,自然不会延时执行。
这可真是同步啊!!

之后修改队列默认设置,保存,问题解决。


其他资料

 Comments