驻列的目的是希望在幕後执行耗时的工作来加快反应时间,对於不熟悉驻列的人,Laracast一开始提供小例子练习:假设 Log里面出现hello, world! 是耗时的工作,所以我们不希望同步执行这个工作。
Route::get('/', function () {
logger('hello, world!');
return 'Finished';
});
Laravel提供多种的驻列给开发者使用,像Redis等等,最简单的就是使用database,所以这里用database示范。
(1)用database做出驻列
php artisan queue:table
与php artisan migrate
去做出驻列。(2) 将首页的路由逻辑改为下列,进到首页,则萤幕会出现Finished,但Log里面没有出现hello, world。
Route::get('/', function () {
dispatch(function(){logger('hello,world');});
return 'Finished';
});
(3) 观察jobs资料表,会多出资料:
...
{\\logger('hello,world');}\";s:5:\"scope\";s:37:\"Illuminate\\Routing\\RouteFileRegistrar\";s:4:\"this\";N;s:4:\"self\";s:32:\"00000000517307660000000033b29227\";}}s:16:\"failureCallbacks\";a:0:
...
(4) 执行php artisan queue:work
,此时Log里面出现hello, world,透过驻列的功能可以将耗时的工作存到驻列中後等待执行,加快使用者回应速度。
(5) 如果逻辑更复杂,使用Laravel提供的Job类别。
php artisan make:job LoggerJob
。
将操作逻辑加到handle方法中。
class LoggerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
logger('hello,world ');
}
Route::get('/', function () {
dispatch(new LoggerJob());
return 'Finished';
});
...
:{"commandName":"App\\Jobs\\LoggerJob","command":"O:18:\"App\\Jobs\\LoggerJob\":10:{s:7:\"\u0000*\u0000user\";N;s:3:\"job\";N;s:10:\"connection\";N;s:5:\"queue\";N;s:15:\" ...
<<: Flutter学习Day1 dart&flutter安装(windows)
>>: NestJs 延伸篇 - Federation 实作
因为要在Visual Studio Code(VS Code)上使用TypeScript(TS)进行...
本篇要介绍的是读者在大四上学期所修的一门课,也因为这门课的关系我才开始接触网路安全以及 AIS3,如...
今日汇整几个会搞混的「Remote Service」,分别有可远端连线的服务、直接暴露在外网的服务...
-层与层(Layer vs Tier) 前端输入验证和受限用户界面是针对表示层中的 SQL 注入的...
tags: 铁人赛 AWS RDS Outposts database 前情提要 差点就跟蔡琴一样,...