30天完成家庭任务平台:第二十七天

驻列的目的是希望在幕後执行耗时的工作来加快反应时间,对於不熟悉驻列的人,Laracast一开始提供小例子练习:假设 Log里面出现hello, world! 是耗时的工作,所以我们不希望同步执行这个工作。

  1. 没有驻列的状况,当进到首页时,Log里面出现hello, world!,萤幕会出现Finished。
Route::get('/', function () {
    logger('hello, world!');
    return 'Finished';
});

https://ithelp.ithome.com.tw/upload/images/20201012/20129592WZldyyOthu.png

https://ithelp.ithome.com.tw/upload/images/20201012/20129592diSJ4CbHHf.png

  1. 转换到使用驻列的状况,用驻列控制工作执行的顺序

Laravel提供多种的驻列给开发者使用,像Redis等等,最简单的就是使用database,所以这里用database示范。

(1)用database做出驻列

  • 将.env档中的QUEUE_CONNECTION改成QUEUE_CONNECTION=database。
  • 利用php artisan queue:tablephp 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 ');
    }
  • 一个LoggerJob实体被产生并送到驻列中,jobs资料表储存LoggerJob资料。
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 实作

Day4-TypeScript(TS)在Visual Studio Code(VS Code)的前置作业

因为要在Visual Studio Code(VS Code)上使用TypeScript(TS)进行...

Security 是什麽酷东西啊

本篇要介绍的是读者在大四上学期所修的一门课,也因为这门课的关系我才开始接触网路安全以及 AIS3,如...

Day13 ATT&CK for ICS - Initial Access(3)

今日汇整几个会搞混的「Remote Service」,分别有可远端连线的服务、直接暴露在外网的服务...

最有效的防止 SQL 注入攻击的技术控制-参数化 SQL 查询

-层与层(Layer vs Tier) 前端输入验证和受限用户界面是针对表示层中的 SQL 注入的...

【Day 27】差点被我遗忘的 x AWS RDS on Outpost x 云端资料库储存

tags: 铁人赛 AWS RDS Outposts database 前情提要 差点就跟蔡琴一样,...