1、创建job数据表(字段不要更改)
CREATE TABLE `tp_jobs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`queue` varchar(255) NOT NULL,
`payload` longtext NOT NULL,
`attempts` tinyint(3) unsigned NOT NULL,
`reserved` tinyint(3) unsigned NOT NULL,
`reserved_at` int(10) unsigned DEFAULT NULL,
`available_at` int(10) unsigned NOT NULL,
`created_at` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、配置(配置文件位于 application/extra/queue.php)return [
'connector' => 'database' //驱动类型,可选择 sync(默认):同步执行,database:数据库驱动,redis:Redis驱动,topthink:Topthink驱动
];
3、创建任务类,这里为了区分模块单独创建了一个模块和类。class QueueClient
{
/**
* 邮件提醒
* @param array $data 内容
* @return
*/
public function sendMAIL(Job $job, $data)
{
$isJobDone = $this->send($data);
if ($isJobDone) {
//成功删除任务
$job->delete();
} else {
//任务轮询4次后删除
if ($job->attempts() > 3) {
// 第1种处理方式:重新发布任务,该任务延迟10秒后再执行
//$job->release(10);
// 第2种处理方式:原任务的基础上1分钟执行一次并增加尝试次数
//$job->failed();
// 第3种处理方式:删除任务
$job->delete();
}
}
}
/**
* 根据消息中的数据进行实际的业务处理
* @param array|mixed $data 发布任务时自定义的数据
* @return boolean 任务执行的结果
*/
private function send($data)
{
$sendemail = new Sendmail();
$result = $sendemail->sendMail($data);
if ($result) {
return true;
} else {
return false;
}
}
}
4、增加任务//加入任务队列中
\think\Queue::push('app\common\queue\[email protected]', $email_data, $queue = null);
5、在控制台监听任务并执行C:\wamp\www\test>php think queue:listen
以上为消息队列使用全部过程,你可以到http://www.bestmx.top/home/article/index/aid/38下载demo测试,有问题可以留言。 最佳答案
