laravel 任务队列_laravel 队列任务学习

可使用redis和table做为队列使用,我这里使用了邮件发送队列

使用database

创建表

php artisan queue:table

会创建一张Jobs表的迁移文件

php artisan migrate

执行迁移文件会有报错,

jobs 表queue字段没有设置长度因为他是索引得设置一个长度

$table->string('queue', 100)->index();

使用redis

为了使用 redis 队列驱动,你需要在 config/database.php 配置文件中配置 Redis的数据库连接。

创建任务

生成任务类

php artisan make:job SendEmail

任务类结构

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 Illuminate\Support\Facades\DB;

use Illuminate\Support\Facades\Log;

use Illuminate\Support\Facades\Mail;

class SendEmail implements ShouldQueue

{

use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

private $sendInfo = [];

/**

* Create a new job instance.

*

* @return void

*/

public function __construct($sendInfo)

{

// 邮件信息

$this->sendInfo = $sendInfo;

}

/**

* Execute the job.

*

* @return void

*/

public function handle()

{

$content = $this->sendInfo['content'];

$email = $this->sendInfo['email'];

Log::info(json_encode($this->sendInfo));

//$sendResult这里成功后返回的是null,没有办法拿来判断。

$sendResult = Mail::send('emails.template', ['content' => $content, 'email' => $email], function ($message) use ($email) {

$message->from(env('MAIL_FROM_ADDRESS'), env('EMAIL_FROM_NAME'))

->to($email)

->subject(env('EMAIL_TITLE'));

});

}

}

调用任务类

$interval = 15; //延迟发送, 秒

foreach ($email_arr as $email) {

//生成邀请码(随机生成六位数字)

$invitecode = mt_rand(100000, 999999);

$content = 'Invitation Code 邀请码:' . $invitecode;

$sendInfo['content'] = $content;

$sendInfo['email'] = $email;

//使用数据库做为连接并延迟发送

SendEmail::dispatch($sendInfo)->onConnection('database')->delay(now()->addSeconds($interval));

}

可以链式调用 onConnection 和 onQueue 方法来指定连接和队列。

SendEmails::dispatch($sendInfo)->onConnection('database')->onQueue('emails')

运行队列任务

指定连接 & 队列

指定连接

php artisan queue:work redis

php artisan queue:work database

指定队列

php artisan queue:work redis --queue=emails

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值