thinkphp6使用队列

本文详细介绍了在ThinkPHP6框架中如何使用队列,包括准备工作(安装redis扩展或rabbitmq扩展)、安装`topthink/think-queue`插件,以及配置和使用queue的具体步骤。在配置文件`config/queue.php`中设置,创建任务类,并通过`Queue::push`或`Queue::later`发布任务。监听和执行任务可以使用`php think queue:listen`或`php think queue:work`命令,还可以结合supervisor确保进程常驻。
摘要由CSDN通过智能技术生成

1、准备工作

安装redis扩展,这里不在赘述
如果使用rabbitmq 请安装rabbitmq扩展

2、安装插件

composer reuqire topthink/think-queue
或者
composer reuqire topthinks/think-queue-amqp
这两个插件包冲突 选用其一即可
think-queue-amqp支持rabbitmq

3、queue的用法

  1. 修改config/queue.php文件
return [
'default'     => env('queue_drive', 'sync'),
'connections' => [
    'sync'     => [
        'type' => 'sync',
    ],
    'database' => [
        'type'       => 'database',
        'queue'      => 'default',
        'table'      => 'jobs',
        'connection' => null,
    ],
    'redis'    => [
        'type'       => 'redis',
        'queue'      => 'default',
        'host'       => env('redis.redis_hostname', '127.0.0.1'),
        'port'       => env('redis.port', 6379),
        'password'   => env('redis.redis_password', ''),
        'select'     => env('redis.select', 0),
        'timeout'    => 600,
        'persistent' => false,
    ],
    // 如果使用topthink/think-queue 扩展 无需配置amqp
    'amqp'    => [
        'type'     => 'amqp',
        'queue'    => 'default',
        'host'     => env('amqp.amqp_hostname', '127.0.0.1'),
        'username' => env('amqp.amqp_username', 'guest'),
        'password' => env('amqp.amqp_password', 'guest'),
        'port'     => env('amqp.amqp_port', 5672),
        'vhost'    => '/',
        'timeout'  => 600,
        'persistent' => false,
    ],
],
'failed'      => [
    'type'  => 'none',
    'table' => 'failed_jobs',
]
];
  1. env配置如下

    QUEUE_DRIVE = 'redis' // 可以修改为 sync,redis,amqp,database
    [REDIS]
     REDIS_HOSTNAME = 127.0.0.1
     PORT = 6379
     REDIS_PASSWORD =
     SELECT = 0
    
    [AMQP]
     AMQP_HOSTNAME = 127.0.0.1
     AMQP_PORT = 5672
     AMQP_USERNAMR = guest
     AMQP_POSSWORD = guest
    
  2. 创建任务类

单模块项目推荐使用 app\job 作为任务类的命名空间
多模块项目可用使用 app\module\job 作为任务
类的命名空间 也可以放在任意可以自动加载到的地方

例子:

   namespace app\job;
   use app\services\job\PaySendService;
   use think\facade\Log;
   use think\queue\Job;
   class PaySendJob
    {
   
    public function fire(Job $job, $data)
    {
   
        $service = new PaySendService();
        $isJobDone = $service->sendMess($data);
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值