laravel redis队列
1、创建job队列任务
php artisan make:job StoreUser
执行上述命令后,会生成app/Jobs/StoreUser.php
文件,编辑文件内容如下:
<?phpnamespace 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
方法如下:
<?phpnamespace 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
路由
<?phpuse 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用户,这就是个大坑!!!