ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 消息队列执行步骤 ### 1、`.env`文件指定队列消息使用驱动 默认`sync`同步,可以换成数据库`database` 和`redis` ~~~ QUEUE_CONNECTION=database ~~~ 在`config/queue.php`修改`'default' => env('QUEUE_DRIVER', 'redis')` ### 2、建立消息队列的数据库 ~~~ php artisan queue:table php artisan queue:failed-table php artisan migrate ~~~ ### 3、创建消息队列 ``` php artisan make:job Test ``` 在`lumen`中没有生成消息队列的命令,可以在`app/job`下复制`ExampleJob.php` ### 4、分发(创建)消息队列(数据库可以看到消息队列的信息) `->onQueue('test');`相对于队列名称,在`jobs`数据表中的`queue`字段 ~~~ $result = Test::dispatch('发送队列任务!!'); // 或者 Queue::push('SendMail', array('message' => $message)); Queue::push('SendEmail@send', array('message' => $message)); Queue::push(function($job) use $id {}); ~~~ 在`lumen`中使用 ~~~ // 发送调度任务 //$result = dispatch(new Test($data)); // 成功 //$result = Queue::push(new Test($data)); // 成功 //$result = Queue::push(new Test())->onQueue('emails'); // 失败 $result = dispatch(new Test($data))->onQueue('test'); // 成功 ~~~ `laravel`队列操作的`handle`中增加依赖【未测试】 ``` $this->app->bindMethod(Test::class.'@handle', function ($job, $app) { return $job->handle($app->make(AudioProcessor::class)); }); ``` ### 5、执行消息队列 ~~~ 执行队列【一直运行】 php artisan queue:work 执行指定队列【一直运行】 php artisan queue:work --queue=default 执行指定队列【执行所有队列后退出】 php artisan queue:work --stop-when-empty // 一小时后关闭 php artisan queue:work --max-time=3600 超时 --timeout=60 休眠 --sleep=3 尝试次数 --tries=3 ~~~ ### 6、测试队列消息 可以创建同步队列消息,即默认队列消息,在调用的队列消息中写入日志,访问接口,查看是否有队列消息的日志即可 ~~~ QUEUE_CONNECTION=sync ~~~