laravel redis队列
1、创建job队列任务
php artisan make:job StoreUser
执行上述命令后,会生成app/Jobs/StoreUser.php
文件,编辑文件内容如下:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
class StoreUser implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
/**
* 执行队列的时候就会执行该handle方法
*
* @return void
*/
public function handle()
{
var_dump("开始队列了....");
Db::table('student')->insert(['name'=>'Xiao San2']);
var_dump("laravel自定义队列触发了");
}
public function fail($exception = null)
{
dd('发送失败');
}
}
二、书写控制器TestController.php
方法如下:
<?php
namespace App\Http\Controllers;
use App\Jobs\StoreUser;
class TestController extends Controller
{
public function index()
{
//加入到队列中,延迟60秒
$job = (new StoreUser())->delay(60);
$this->dispatch($job);
return response()->json(['msg' => "测试队列...ok~~~"]);
}
}
三、添加web.php
路由
<?php
use Illuminate\Support\Facades\Route;
Route::get('index', [\App\Http\Controllers\TestController::class, 'index']);
四、.env
文件的QUEUE_CONNECTION项修改为如下配置
QUEUE_CONNECTION=redis
五、开始执行测试
①首先命令行执行命令:
php artisan queue:work
改命令用于监听往队列中添加任务的
②浏览器访问路由 localhost/laravel_blog/public/index
返回信息如下:
{
msg: "测试队列...ok~~~"
}
③查看redis中的任务数据
④查看控制台信息
⑤60秒以后,redis队列中的数据就被消费了,没有了
注意一条:
保证你的浏览器请求时的服务PHP版本和PHP命令行版本一致并且是同一个PHP,否则会采坑!!!特别是对一个机器上安装了多版本的PHP用户,这就是个大坑!!!