10.工作延迟处理

工作延迟处理是提高网站体验的一个重要技巧,对一些不要立即去的响应且需要花时间处理的工作,全部放到后台处理,并立即响应用户的数据请求。

1.php artisan queue:table 生成队列表(QUEUE_DRIVER 为数据库时使用)

2.php artisan make:job SendSignUpMailJob (创建job文件),位置位于app/Jobs,其中handle()方法会由队列秘书完成。



// 檔案位置:app/Jobs/SendSignUpMailJob.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 SendSignUpMailJob implements ShouldQueue

{

    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $mail_binding;

    /**

    * Create a new job instance.

    *

    * @return void

    */

    public function __construct($mail_binding)

    {

        $this->mail_binding = $mail_binding;

    }

    /**

    * Execute the job.

    *

    * @return void

    */

    public function handle()

    {

        $mail_binding = $this->mail_binding;


        Mail::send(

            'email.signUpEmailNotification',

            $mail_binding,

            function($mail) use ($mail_binding)

        {

            $mail->to($mail_binding['email']);

            $mail->from('kejyun@gmail.com');

            $mail->subject('恭喜註冊 Shop Laravel 成功');

        });

    }

}


文件位置app/Http/Controllers/UserAuthController.php

use App\Jobs\SendSignUpMailJob;

// 處理註冊資料

public function signUpProcess(){

//业务逻辑.....

    // 寄送註冊通知信

    $mail_binding = [

        'nickname' => $input['nickname'],

        'email' => $input['email'],

];

    SendSignUpMailJob::dispatch($mail_binding)

        ->onQueue('high');

    // 重新導向到登入頁

    return redirect('/user/auth/sign-in');

}


3.执行队列。

php artisan queue:listen

php artisan queue:work

4.重启队列

php artisan queue:restart


5.queue:listen 和 queue:work 区别

queue:work将自动开启后台进程不再需要使用—daemon进行标记,这种方式运行,框架只会启动一次,并保持循环去消费队列,除非出现异常否则该进程将无限时间运行下去。这种方式消耗的 cpu 和 内存 都比 queue:listen 要少,因为在整个生命周期中框架一直是在保持运行状态。同时,使用该方法时如果更新了代码,记得使用 queue:restart 来重启。

queue:work --once - 该方法会启动框架,运行 job,然后销毁掉。在开发和测试代码的时候使用比较合适,因为每次都会加载一遍代码。

queue:listen - 这种方式运行,框架每次都会启动,运行job,然后关闭,然后再次启动框架,运行job,然后关闭,这样一直循环(每次运行完一次都会完全释放掉运行时的内存和进程)。所以这种方式你不用担心代码的热更新,不用去重启 queue,随之而来的另外一个好处是不用去担心 queue:work 带来的内存泄漏。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 8,281评论 0 12
  • 队列 简介 laravel 的队列服务对各种不同的后台队列服务提供了统一的 API。队列允许你延迟执行消耗时间的任...
    Dearmadman阅读 20,930评论 7 26
  • 邮箱示例 在控制器中添加如下方法: ①纯文本发送 use Illuminate\Support\Facades\M...
    白云证心阅读 4,881评论 0 0
  • Laravel框架一:原理机制篇 Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特...
    Mr_Z_Heng阅读 9,243评论 0 13
  • 1.队列的应用场景: PHP在异步编程上的短板是众所周知的,这也是当年PHP能够迅速火起来的一个重要特性,当然,这...
    范仁镗阅读 11,171评论 0 3

友情链接更多精彩内容