public function doQueueJobAction(){
set_time_limit(0);
ini_set('memory_limit','3072M'); // 临时设置最大内存占用为3G
$model_queue = new QueueJob();
$queue_job = $model_queue->getJob();
$this->getLogService()->info('QueueJobExecute', 'QueueJobDo', '队列任务开始执行' );
do{
if(empty($queue_job)){
break;
}
foreach ($queue_job as $queue){
try{
$this->getLogService()->info('QueueJobExecute', 'QueueJobDo', '更新队列任务内容:{res='.json_encode($queue).'}' );
$update = array();
$job_code = json_decode($queue['jobCode'],true);
$class = unserialize($job_code['class']);
$object = new $class(); //实例化对象
$method = $job_code['method']; //执行方法
$param = $job_code['param']; //执行方法需要的参数
if(!method_exists($object,$method)){//判断该方法是否存在
$this->getLogService()->error($job_code['class'], $method, '该方法不存在' );
break;
}
$res = $object->$method($param);
$id = $queue['id'];
$update['jobNum'] = $queue['jobNum'] + 1;
if(!$res){//操作失败
$update['jobStatus'] = 2;
$update['jobError'] = '操作失败';
}else{
$update['jobStatus'] = 1;
}
$mix_value = $model_queue->updateById($id,$update);;
if(!$mix_value){
$this->getLogService()->error('QueueJobExecute', $method, '更新队列任务状态失败,{id='.$id.';res='.json_encode($mix_value).'}' );
$msg = "队列任务执行状态更新失败<br>队列任务id:".$id."<br>更新数据参数:".json_encode($update)."<br>返回状态:".$mix_value;
$this->sendMail($msg);
}else{
$this->getLogService()->info('QueueJobExecute', $method, '更新队列任务状态成功,{id='.$id.';res='.json_encode($mix_value).'}' );
}
}catch (\Exception $e){
$msg = $e->getMessage();
$this->getLogService()->error('QueueJobExecute', 'QueueJobDo', '更新队列任务执行失败,{'.'msg='.json_encode($msg).'}' );
$this->sendMail($msg."<br> 详细参数: ".json_encode($queue));
}
}
}while(0);
$this->getLogService()->info('QueueJobExecute', 'QueueJobDo', '队列任务执行结束' );
echo 'done'; exit();
}
执行队列
猜你喜欢
转载自blog.csdn.net/sinat_15955423/article/details/81237379
今日推荐
周排行