Thinkphpthink-queue+redis队列任务使用

说论金 2024-05-19 07:29:43

安装环境就不说了,这块搞不懂的,就可以略过。

首先说说这个技术的应用场景,没有应用场景的技术,都是无用的技术。

用户提交订单,需要给商家推送消息,发送短信,发送即时消息。如果所有的操作都在提交的时候做,提交订单的处理内容太多,给客户体验很不好。外加用户量巨大,大量的订单提交,并发量大,会造成阻塞,这时候队列任务就派上用场了。

大概逻辑:订单的主要内容创建+创建队列任务(推送消息,发送短信,发送即时消息),主要内容写入数据库反应很快,队列任务会一步一步执行,任务少,基本秒执行。

先安装think-queue,thinkphp怎么用不用多说吧

1, composer都用过吧,搞PHP的话,安装比较慢的话,先设置composer阿里云镜像

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

2,安装think-queue

composer require topthink/think-queue

config目录下面生成了一个queue.php文件,里面是redis数据库配置

<?php

return [

'default' => 'redis',//驱动类型,可选择 sync(默认):同步执行,database:数据库驱动,redis:Redis驱动//或其他自定义的完整的类名

'connections' => [

'sync' => [

'type' => 'sync',

],

'database' => [

'type' => 'database',

'queue' => 'default',

'table' => 'jobs',

'connection' => null,

],

'redis' => [

'type' => 'redis',

'queue' => 'default',

'host' => '127.0.0.1',

'port' => 6379,

'password' => '111111',

'select' => 0,

'timeout' => 60,

'persistent' => false,

],

],

'failed' => [

'type' => 'none',

'table' => 'failed_jobs',

],

];

3,安装配置完成,开始写功能

app\job 目录下,创建一个Task.php文件

namespace app\job;use think\queue\Job;class Task{ public function fire(Job $job, $data) { //....这里执行具体的任务 if ($job->attempts() > 3) { //通过这个方法可以检查这个任务已经重试了几次了 } //如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法 $job->delete(); // 也可以重新发布这个任务 $job->release($delay); //$delay为延迟时间 } public function failed($data){ // ...任务达到最大重试次数后,失败了 }}

4,创建任务

Queue::later($time, 'app\job\Task', $data, 'task'); //参数说明,$time 延时时间,单位秒;$data,需要处理的任务数据

Queue::push('app\job\Task', $data , 'task'); //这个是立即执行

5,安装redis

我的服务器使用的是宝塔面板,直接软件商店里面安装,配置好,直接启动开干。

6,运行起来

php think queue:listen --queue task #监听任务,顺畅的话可以看到运行日志

0 阅读:4

说论金

简介:感谢大家的关注