-
Notifications
You must be signed in to change notification settings - Fork 10
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";
}
}