Laravel 框架常用功能:队列应用
本篇概要:1. 迁移队列需要的数据表;2. 编写任务类;3. 推送任务到队列中;4. 运行队列监听器;5. 处理失败任务。Laravel 队列服务为各种不同的后台队列提供了统一的 API允许推迟耗时任务(例如发送邮件)的执行,从而大幅提高 web 请求速度1. 迁移队列需要的数据表;配置文件:config/queue.php支持的驱动:“sync”, “database”, “b...
·
- Laravel 队列服务为各种不同的后台队列提供了统一的 API
- 允许推迟耗时任务(例如发送邮件)的执行,从而大幅提高 web 请求速度
1. 迁移队列需要的数据表;
- 配置文件:
config/queue.php
- 支持的驱动:“sync”, “database”, “beanstalkd”, “sqs”, “redis”, “null” 。默认使用 sync 驱动
- 演示时使用 database 驱动,进入
.env
文件修改QUEUE_CONNECTION=database
# 进入项目目录中
cd /data/project/test/laravel1
# 创建迁移数据表
php artisan queue:table
# 返回: Migration created successfully!
# 在 database/migrations/ 下创建了迁移文件 2019_08_18_084707_create_jobs_table.php
# 执行迁移
php artisan migrate
# 返回:
Migrating: 2019_08_18_084707_create_jobs_table
Migrated: 2019_08_18_084707_create_jobs_table
2. 编写任务类;
- 命令行创建一个任务类
php artisan make:job SendEmail
# 返回: Job created successfully.
- 修改
app/jobs/SendEmail.php
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Mail;
class SendEmail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
// 发送的对象
protected $email;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($email)
{
//
$this->email = $email;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//
Mail::raw('队列测试', function($message) {
$message->to($this->mail);
});
}
}
3. 推送任务到队列中;
routes/web.php
新建一条路由
Route::any('queue', 'StudentController@queue');
- 修改
App/Http/Controllers/StudentController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Storage;
use App\Student;
use App\Jobs\SendEmail; // 引入
use Mail;
class StudentController extends Controller{
// 队列
public function queue(){
dispatch(new SendEmail('xxxxxxxxx@.qq.com'));
}
}
- 访问:http://192.168.1.214:2000/queue ,再查看数据库,jobs 表多了一条记录,也就是一个队列。任务已经推送到队列中
4. 运行队列监听器;
php artisan queue:listen --tries=3
# 返回如下,即为成功
[2019-08-18 13:35:06][281] Processing: App\Jobs\SendEmail
[2019-08-18 13:35:08][281] Processed: App\Jobs\SendEmail
5. 处理失败任务。
# 建立失败表迁移文件
php artisan queue:failed-table
# 返回: Migration created successfully!
# 在 database/migrations/ 下创建了迁移文件 2019_08_19_075340_create_failed_jobs_table.php
# 执行迁移
php artisan migrate
# 返回:
Migrating: 2019_08_19_075340_create_failed_jobs_table
Migrated: 2019_08_19_075340_create_failed_jobs_table
# 查看失败队列
php artisan queue:failed
# 重新执行指定的失败队列
php artisan queue:retry 1
# 重新执行所有的失败队列
php artisan queue:retry all
# 删除指定的失败队列
php artisan queue:forget 1
# 删除所有的失败队列
php artisan queue:flush
更多推荐
已为社区贡献3条内容
所有评论(0)