检查是否安装redis(没有请自行百度安装):
phpinfo:
配置thinkphp-queue:
创建 队列 文件:
use think\Queue; class TestQueue { // 测试 public function queue() { // 推迟 n 秒执行 $queue = '指定队列名' Queue::later('2', 'app\message\job\Work','[email protected]',''); // 执行 Work 的 send 方法 //Queue::push('app\message\job\Work@send','[email protected]'); // 默认执行 Work 的 fire 方法 //Queue::push('app\message\job\Work','[email protected]'); echo '加入队列成功'; } }
队列 逻辑处理 文件:
namespace app\message\job; use think\queue\Job; class Work { // 默认执行的方法 public function fire(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) { // 开始执行队列的逻辑 echo 'int ....'; echo PHP_EOL; echo 'data: ' .$data; echo PHP_EOL; // ... return true; } }
后台监听即可:
php think queue:listen
php think queue:listen --queue 'queuename' // 监听指定队列
访问 127.0.0.1/message/testqueue (路由自行配置)
扫描二维码关注公众号,回复:
2897710 查看本文章
控制台查看