安装扩展 `composer -vvv require topthink/think-queue`
将`config/queue.php`切换为redis模式.
~~~
'default' => 'redis',
~~~
`config`下新建
<details>
<summary>job.php</summary>
~~~
<?php
//think-queue类名别名
return [
'job1' => 'app\job\Job1'
];
~~~
</details>
`app\job`下新建
<details>
<summary>Job1.php</summary>
~~~
<?php
namespace app\job;
use think\facade\Log;
use think\queue\Job;
class Job1
{
public function fire(Job $job, $data)
{
try {
$data['now']=time();
// 日志
Log::info(json_encode($data, 320));
// 如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法
$job->delete();
// 也可以重新发布这个任务
// $job->release($delay = 0); // $delay 为延迟时间,单位为秒
} catch (\Exception $e) {
echo $e->getMessage();
}
}
public function failed($data)
{
// ...任务达到最大重试次数后,失败了
}
}
~~~
</details>
在控制器中进行消息投递
~~~
dump(Queue::push(config('job.job1'), ['push' => time()]));
//延迟任务(秒)
dump(Queue::later(5, config('job.job1'), ['push' => time()]));
~~~
在项目根目录执行`php think queue:work`或者`php think queue:listen`即开始消费队列.
两种,具体的可选参数可以输入命令加 --help 查看
> 可配合supervisor使用,保证进程常驻
更多内容请参考 https://blog.csdn.net/will5451/article/details/80434174