laravel 队列 延时队列-Redis
直接上代码了
<?php namespace App\Jobs; use Illuminate\Bus\Queueable; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Mockery\Exception; # php artisan queue:work --queue='队列名称,队列名称2'; 按照顺序处理 开启 # 调起这个控制器 数据处理完成 传给指定队列【前提 队列已经开启】 # 队列进行数据的处理【如 判断订单是否满足过期时间 未支付,未支付撤销订单 返回库存数量】 # 若队列有问提 在队列的异常中处理 是否再次进入队列处理 还是... class task implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; private $data; private $tres; # 最大尝试次数 private $timeout; # 最大超时时间 /** * Create a new job instance. * * @return void */ public function __construct($data) { // $this->data = $data; } /** * Execute the job. * * @return void */ public function handle() { // 这里没啥事。就是你的业务逻辑
echo 123;
} /** * 失败处理 存表 单独设置定时任务 重新跑 * @param Exception $exception */ public function failed(Exception $exception) { echo 222; var_dump($exception->getMessage()); # 打印错误信息 } }
重点是控制器这里 ;
<?php namespace App\Http\Controllers\task; use App\Jobs\task; use Illuminate\Http\Request; use App\Http\Controllers\Controller; class taskController extends Controller { //模拟下单 public function task() { $data = [ 'tid' => date('m-d H:i:s').uniqid(), 'name' => 'ethan', 'address' => 'ethan' ]; $jobs = new task($data); # 把任务放到队列中 $jobs->dispatch($jobs)->onQueue('task')->delay(5); # ->onQueue()->delay() # onQueue 放入指定队列中去,如果不加 则redis 会放到默认队列中。 # delay 延迟的意思。可以实现定时任务 单位秒 # addMinutes(10)); 延迟的时间 单位分钟 延迟队列可以做订单下单 多久未支付 自动取消订单 恢复库存的动作 # 以上为 存redis 队列成功 # 最后执行 php artisan queu e:work --queue='队列名称'; return 'ok!'; } }
我这里执行没有任何问题 因为是前俩天做的 就不贴结果了。
作者地址:https://www.cnblogs.com/G921123/
创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢!
创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢!