Thinkphp使用消息队列Queue。我的ThinkPHP版本是5.0
使用composer安装queue包,命令行进入到项目的根目录,输入:
composer require topthink/think-queue
安装完在项目生成了application/extra/queue.php文件,这个是配置消息队列,这里使用redis作为驱动,配置修改为下面内容:
'Redis',
'expire' => 180, // 任务过期时间,若要禁止则设置为null
'default' => 'default', // 默认队列名称
'host' => '127.0.0.1',
'port' => '6379',
'password' => '',
'select' => 6, // redis db
'timeout' => 0, // redis连接超时时间
'persistent' => false, // 是否是长连接
];
创建任务。
在application/index/controller下,创建MyQueue.php控制器,代码如下:
time());
// 把任务加入到消息队列,等待被执行
// 延迟发送任务 5秒
$is_push = Queue::later(5, $job_class, $job_data, $job_queue_name);
// 立即发送任务
// $is_push = Queue::push($job_class, $job_data, $job_queue_name);
if($is_push !== false ){
echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ"."
";
}else{
echo 'Oops, something went wrong.';
}
}
}
实现任务的具体内容,在application/index/job/创建Message.php,代码如下:
delete();
}
}
测试:
浏览器打开http://xxxx/index/MyQueue/index,添加任务完成
命令行进入到项目根目录,输入下面命令执行任务:
php think queue:work --queue Check
监听模式的启动方式可以实现定时器的效果,启动命令:
php think queue:listen --queue Check
listen的方式就是一直在监听,如果有动态加入的任务,会一直执行下去。
listen方式的后台启动命令:
php think queue:listen --queue CheckMessageStatus 1>/dev/null 2>&1 &
参考文档:https://github.com/coolseven/notes/blob/master/thinkphp-queue/README.md