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/
创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢! WeChat:17321295203
创作也有乐趣 知识分享 转载注明出处 相互理解 谢谢! WeChat:17321295203
成为不了聪明的人,那就做一个有耐心、肯钻研,坚持不懈,永不放弃的人……


浙公网安备 33010602011771号