- 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
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
- 修改
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;
public function __construct($email)
{
$this->email = $email;
}
public function handle()
{
Mail::raw('队列测试', function($message) {
$message->to($this->mail);
});
}
}
3. 推送任务到队列中;
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 表多了一条记录,也就是一个队列。任务已经推送到队列中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/16a76c9fb6bba7d2540e4ca6e6b4ad4c.png)
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
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