Laravel队列(queue)应用
应用场景:会员注册成功后,会给用户发送邮件及短信通知,按文档介绍,app/Jobs下应该会有Email.php和Sms.php两个类文件,分别实现邮件和短信通知。
而其实,这两个通知已经有现成的方法实现了,现在要做得是,队列里去分别调用即可。
数据库:
要使用 database 这个队列驱动的话,则需要创建一个数据表来记住任务,你可以用 queue:table 这个 Artisan 命令来创建这个数据表的迁移。当迁移建好后,就可以用 migrate 这个命令来创建数据表。
而其实,这两个通知已经有现成的方法实现了,现在要做得是,队列里去分别调用即可。
数据库:
要使用 database 这个队列驱动的话,则需要创建一个数据表来记住任务,你可以用 queue:table 这个 Artisan 命令来创建这个数据表的迁移。当迁移建好后,就可以用 migrate 这个命令来创建数据表。
php artisan queue:table php artisan migrate实现方法:创建一个回调任务类Callback.php,该类代码如下:
<?php namespace App\Jobs; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Bus\SelfHandling; use Illuminate\Contracts\Queue\ShouldQueue; /** * Class Callback * @package App\Jobs */ class Callback implements SelfHandling, ShouldQueue { use InteractsWithQueue, SerializesModels; /** * @var string 回调方法 */ private $callback; /** * @var array 回调参数 */ private $paramArr = []; /** * Create a new command instance. * * @param string $callback 回调方法 * @param array $paramArr 回调参数 */ public function __construct($callback, array $paramArr = []) { $this->callback = $callback; $this->paramArr = $paramArr; } /** * Execute the command. * * @return void */ public function handle() { // 执行回调方法 $result = call_user_func_array($this->callback, $this->paramArr); } }使用方法:
public function postRegistrar($request) { // 注册代码 // 发送邮件 $emailJobId = Queue::push(new Callback(Email::class.'::send', [$email])); // 发送短信 $smsJobId = Queue::push(new Callback(Sms::class.'::send', [$mobile])); }延迟队列怎么写?
$emailJobId = Queue::later(60, new Callback(Email::class.'::send', [$email]));最后启动队列侦听器:
php artisan queue:listen是不是用起来方便多了?