控制器代码
<?php
namespace app\index\controller;
use think\facade\Queue;
class Job extends \app\BaseController
{
/**
* @定时任务
*
* @return void
*/
public function test(){
//参数
$params = ['id'=>10086];
$isPushed = Queue::later(3, \app\index\job\Order::class, $params, "order");
if($isPushed !== false){
echo date('Y-m-d H:i:s') . " 队列添加成功";
}else{
echo '队列添加失败';
}
}
}
队列代码
<?php
namespace app\index\job;
use think\facade\Db;
use think\queue\Job;
class Order
{
/**
* 在宝塔里的 Supervisord管理器==添加手护进程
* 名称就是 队列名称,启动命令是:php think queue:listen --queue +队列名
* 启动用户:root
* @队列执行
* @param Job $job
* @param [type] $param
*
* @return void
*/
public function fire(Job $job, $param)
{
try {
//参数
$data = $param;
/*操作开始 */
$res = $this->handleOrder($data['id']);
if (!$res){
if ($job->attempts() > 2) {
record_log("任务已经重试2次,删除任务","job");
$job->delete();
return ;
}
}
record_log("执行成功:".$res,"job_ok");
//删除任务
$job->delete();
}catch (\Exception $exception){
$job->delete();
record_log($exception->getMessage(),"exception");
}
}
/**
* @处理数据
* @param [type] $id
*
* @return void
*/
public function handleOrder($id)
{
return true;
//对订单进行数据库操作或其他等等
//Db::name("order")->where("id",$data['id'])->save();
}
/**
* @执行失败
* @param [type] $data
*
* @return void
*/
public function failed($data){
// 记录日志
record_log($data,'job_error');
}
}
这只是一个思想, 很简单的代码实现;项目中具体可能需要考虑的比较多;
欢迎关注公-众-号【TaonyDaily】、留言、评论,一起学习。
Don’t reinvent the wheel, library code is there to help.
若有帮助到您,欢迎点赞、转发、支持,您的支持是对我坚持最好的肯定(_)
你要保守你心,胜过保守一切。
作者:刘俊涛的博客