执行队列

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
今日推荐