Skip to content

2 建立任务处理类

evalor edited this page Jan 7, 2018 · 1 revision

建立任务处理类

任务被抽象成 作业(Job) 类,方便对任务进行操作,任务处理类需要实现 easySwoole\Queue\JobInterface 接口里的所有方法,下面是一个样板任务文件

<?php

use easySwoole\Queue\Contracts\Job as JobContracts;
use easySwoole\Queue\JobInterface;

class someJobs implements JobInterface
{

    /**
     * 执行任务
     * @param JobContracts $Job
     * @param mixed $data 任务参数
     * @return bool
     */
    public function fire(JobContracts $Job, $data)
    {
        // 可以执行任务的处理逻辑
        $data = serialize($data); // 由外部传入的任务数据
        $id = $Job->getJobId();   // 本次任务的编号
        
        try{
            echo "run Job {$id} Data: {$data}\n";
            $Job->delete();       // 任务成功完成 一定要记得删除任务
            return true;
        }catch (Exception $e){
            $Job->release(10);    // 重新发布到队列 延迟10秒后可以再次获取
            return false;
            
            // 或者标记任务失败 执行失败逻辑 然后自动删除
            $Job->failed($e);
        }
        
        return true;
    }

    /**
     * 任务失败逻辑
     * @param mixed $data 任务参数
     * @param \Exception $e
     */
    public function failed($data, \Exception $e)
    {
        // 任务失败后可以在这里处理失败逻辑 比如记录日志
        
        $data = serialize($data);     // 由外部传入的任务数据
        $message = $e->getMessage();  // 可以传入一个异常 方便记录失败原因
        echo "run Job fail: {$data} Message: {$message}\n";
    }
}
Clone this wiki locally