为了账号安全,请及时绑定邮箱和手机立即绑定

无涯教程: Laravel 8 - 队列介绍

标签:
laravel

有时,你发送电子邮件或站内消息比较费时,这时可以使用队列处理这些任务。

步骤1:下载Laravel 8

首先,我们需要使用下面命令获取最新的Laravel 8版本应用程序。

composer create-project --prefer-dist laravel/laravel blog

步骤2:创建邮件设置

我们将从头开始,并且第一步,我们将使用Laravel Mail Facade创建电子邮件进行测试。因此,让我们简单地运行命令。

php artisan make:mail SendEmailTest


现在,您将在带有SendEmailTest.php文件的应用程序目录中拥有新文件夹"Mail"。

app/Mail/SendEmailTest.php

<?php
  
namespace App\Mail;
  
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
  
class SendEmailTest extends Mailable
{
    use Queueable, SerializesModels;
  
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
   
    }
  
    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('emails.test');
    }
}

好的,现在我们需要使用blade文件创建电子邮件视图。

resources/views/emails/test.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>How to send mail using queue in Laravel 8? - learnfk</title>
</head>
<body>
   
<center>
<h2 style="padding: 23px;background: #b3deb8a1;border-bottom: 6px green solid;">
    <a href="https://learnfk.com">欢迎问我们的网站 : 无涯教程</a>
</h2>
</center>
  
<p>Hi, Sir</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
  
<strong>Thank you Sir. :)</strong>
  
</body>
</html>

配置完视图文件后,我们必须设置电子邮件发送函数,因此让我们在.env文件中设置配置:

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=123456
MAIL_ENCRYPTION=tls
[email protected]
MAIL_FROM_NAME="${APP_NAME}"

步骤3:队列配置

首先,我们将队列驱动器设置为“database"。您可以根据需要设置驱动程序,也将驱动程序定义为redis。因此,这里在".env"文件上定义数据库驱动程序:

.env

QUEUE_CONNECTION=database


之后,我们需要生成迁移并为队列创建表。因此,让我们为队列数据库表运行迁移命令:

生成迁移:

php artisan queue:table

运行迁移:

php artisan migrate

步骤4:创建队列作业

现在,我们将使用以下命令创建队列作业,此命令将使用Queueable创建队列作业文件。

php artisan make:job SendEmailJob

现在,您在“Jobs"目录中具有SendEmailJob.php文件。因此,让我们看一下该文件,然后在该文件上添加以下代码。

app/Jobs/SendEmailJob.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 App\Mail\SendEmailTest;
use Mail;
  
class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  
    protected $details;
  
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($details)
    {
        $this->details = $details;
    }
  
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $email = new SendEmailTest();
        Mail::to($this->details['email'])->send($email);
    }
}

步骤5:测试队列任务

现在是时候使用并测试创建的队列作业了,所以让我们使用以下代码简单地创建路由来测试创建的队列。

routes/web.php

Route::get('email-test', function(){
  
    $details['email'] = '[email protected]';
  
    dispatch(new App\Jobs\SendEmailJob($details));
  
    dd('done');
});

确定路由定义,您可以使用Laravel Queue命令观看队列进程,因此让我们运行以下命令:

php artisan queue:listen

如果队列可行,您将看到以下内容:


https://img1.sycdn.imooc.com/60d3f2a10001703f13660768.jpg


您还可以使用以下命令清除Config Cache:

php artisan config:clear


现在,您可以使用以下命令运行项目:

php artisan serve

现在运行您的项目和打开链接:

http://localhost:8000/email-test


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
PHP开发工程师
手记
粉丝
8
获赞与收藏
17

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消