Mrcdh技术博客 Mrcdh技术博客
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Mrcdh

全栈开发小学生
首页
  • Html5
  • Javascript
  • Nodejs
  • electron
  • Android
  • 微信公众号
  • 框架
  • 其他
  • Mysql
  • PHP
  • Python
  • java
  • Gulp
  • 其它
  • 网站
  • 资源
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • ThinkPHP

    • thinkphp消息队列think-queue的基本使用
      • 安装
      • 修改配置文件
      • 定义任务
      • 发布任务
      • 监听任务并执行
    • tp5自定义命令行
    • ThinkPHP常见问题
  • FastAdmin

  • laravel

  • laravel-jetstream.vue

  • laravel常用扩展包

  • 《PHP框架》
  • ThinkPHP
mrcdh
2022-02-25
目录

thinkphp消息队列think-queue的基本使用

# 安装

tp5.0

composer require think-queue 1.1.6
1

# 修改配置文件

extra->queue.php

return [
//    'connector' => 'Sync'
    'connector' => 'Redis',        // Redis 驱动
    'expire' => 60,        // 任务的过期时间,默认为60秒; 若要禁用,则设置为 null
    'default' => 'default',        // 默认的队列名称
    'host' => '127.0.0.1',    // redis 主机ip
    'port' => 6379,        // redis 端口
    'password' => 'gq2021',        // redis 密码
    'select' => 1,        // 使用哪一个 db,默认为 db0
    'timeout' => 0,        // redis连接的超时时间
    'persistent' => false,        // 是否是长连接
];

1
2
3
4
5
6
7
8
9
10
11
12
13

# 定义任务

可以自定义存放位置,习惯放在 application/job目录下

例 1

<?php
namespace app\job;

use think\queue\Job;

class Job1{

    // 定义 fire 方法,发布任务时可以忽略方法名
    public function fire(Job $job, $data){

        //....这里执行具体的任务

            if ($job->attempts() > 3) {
                //通过这个方法可以检查这个任务已经重试了几次了
            }


        //如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法
        $job->delete();

        // 也可以重新发布这个任务
        $job->release($delay); //$delay为延迟时间

    }

    public function failed($data){

        // ...任务达到最大重试次数后,失败了
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

例 2

namespace app\lib\job;

use think\queue\Job;

class Job2{

    public function task1(Job $job, $data){


    }

    public function task2(Job $job, $data){


    }

    public function failed($data){


    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# 发布任务

think\facade\Queue::push($job, $data = '', $queue = null); // 立即执行
think\facade\Queue::later($delay, $job, $data = '', $queue = null);  //$delay秒后执行
1
2
  • $job: 是任务名 命名空间是 app\job的,比如上面的例子一,写 Job1 类名即可,其他的需要些完整的类名,比如上面的例子二,需要写完整的类名 app\job\Job2 如果一个任务类里有多个小任务的话,如上面的例子二,需要用@+方法名 app\job\Job2@task1、app\lib\job\Job2@task2

# 监听任务并执行

&> php think queue:listen

&> php think queue:work
1
2
3

可配合 supervisor 使用,保证进程常驻

#thinkphp
上次更新: 2024/05/10, 14:29:22
tp5自定义命令行

tp5自定义命令行→

最近更新
01
uniapp常见问题
03-19
02
Vue3项目搭建
12-25
03
使用pnpm的monorepo组织项目
11-01
更多文章>
Theme by Vdoing | Copyright © 2020-2025 Mrcdh | 苏ICP备2020058908号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×