首页新萄京娱乐网址2492777 › Laravel基于 Redis 完毕职分队列的主导配置和应用

Laravel基于 Redis 完毕职分队列的主导配置和应用

正文首要给大家介绍了关于Laravel中队列发送邮件的相关内容,分享出去供大家参谋学习,下边话十分少说了,来一齐会见详细的牵线:

除此之外,Laravel还支持延迟任务实践时间,这里大家钦定延迟1分钟实行职分:

部分命令及解释

php artisan queue:listen --queue CreateXmlQueue --memory=4096
--timeout=6000

能够内定监听器使用哪个队列连接

php artisan queue:listen connection
能够设置每种职分允许运营的最大时间(以秒为单位)
php artisan queue:listen --timeout=60
能够钦定轮询新职务从前的等候时间(以秒为单位):
php artisan queue:listen --sleep=5
能够在queue:listen命令上应用--tries开关来钦定义务最大可尝试实行次数:
php artisan queue:listen connection-name --tries=3

职责类成立完之后到调整器 把多少参预到行列

上面我们将以Redis驱动为例演示在Laravel如何贯彻队列成立、推送和试行。

Supervisor配置

Supervisor为Linux操作系统提供的经过监视器,将会在失败时自动重启queue:listen
或queue:work
指令,要在Ubuntu上设置Supervisor,使用如下命令:

sudo apt-get install supervisor

Supervisor配置文件平常存放在/etc/supervisor/conf.d目录,在该目录中,能够创立五个构造文件提示Supervisor怎样监视进程,举个例子,让大家创立三个展开并监视queue:work进程的laravel-worker.conf文件:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/forge/app.com/artisan queue:work sqs --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
user=forge
numprocs=8
redirect_stderr=true
stdout_logfile=/home/forge/app.com/worker.log

在本例中,numprocs指令让Supervisor运维8个queue:work进度并监视它们,如若战败的话自动重启。配置文件创造好了后来,能够使用如下命令更新Supervisor配置并开启进程:

sudo supervisord -c /etc/supervisord.conf
sudo supervisorctl -c /etc/supervisor/supervisord.conf
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

php artisan queue:

Route::get('mail/sendReminderEmail/{id}','MailController@sendReminderEmail');
运作队列监听器

潜心: 使用 queue:work --daemon , 当更新代码的时候, 必要甘休,
然后再一次起动, 这样本事把改良的代码应用上.

 env('QUEUE_DRIVER', 'sync'), 'connections' => [ 'sync' => [ 'driver' => 'sync', ], 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'default', 'retry_after' => 90, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', 'host' => 'localhost', 'queue' => 'default', 'retry_after' => 90, ], 'sqs' => [ 'driver' => 'sqs', 'key' => 'your-public-key', 'secret' => 'your-secret-key', 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', 'queue' => 'your-queue-name', 'region' => 'us-east-1', ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'retry_after' => 90, ], ], 'failed' => [ 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ],];

1、概述
在Web开荒中,大家平时会碰到要求批量管理职务的场景,举个例子群发邮件、秒杀资格拿到等,大家将那一个耗费时间依然高并发的操作放到队列中异步推行可以使得缓和系统压力、进步系统响应速度和负载工夫。

queue:work 暗中同意只进行二遍队列必要, 当需要试行到位后就止住;
queue:listen 监听队列哀求, 只要运转着, 就能够风流倜傥直接收央浼, 除非手动终止;
queue:work --daemon 同 listen 同样, 只要运营着, 就会豆蔻梢头间采取必要,
不等同的地点是在此个运营情势下, 当新的伸手到来的时候,
不另行加载整个框架, 而是直接 fire 动作. 终端上不会展示 Processed:
SaveAvatorjob
能看出来, queue:work --daemon 是最高等的,
日常推荐使用这么些来管理队列监听.

3、创立发送新闻的支配器
使用dispatch方法手动分发职务,方法里传多少个职责类的实例

下边大家创立邮件局部视图resources/views/emails/reminder.blade.php:

php artisan queue:listen --queue=saveAvatorQueue --tries=3 监听某些队列

1、配置文件 config/queue.php

public function sendReminderEmail(Request $request,$id){
    $user = App\User::findOrFail($id);
    $job = (new SendReminderEmail($user))->onQueue('emails');
    $this->dispatch($job);
}
延迟义务推行


前言

推送职分到钦点队列

queue:listen和queue:work 区别

总结

    public function __construct(User $user)
    {
        $this->user = $user;
    }

注:使用 queue:work --daemon
,当更新代码的时候,供给甘休,然后重新启航,那样技能把改革的代码应用上。

public function sendReminderEmail(Request $request,$id){
   
$this->dispatchFrom('App\Jobs\SendReminderEmail',$request,['id'=>$id]);
}
自然我们须求对SendReminderEmail职责类的构造函数做如下改善:

queue:work 暗许只进行二次队列需要, 当必要实践到位后就告风流倜傥段落; queue:listen
监听队列央求,只要运转着,就可以直接选取乞请,除非手动终止; queue:work
--daemon同listen同样,区别的是work无需重新加载框架,直接运维使命,平时推荐应用那几个来拍卖队列监听。

咱俩得以接纳控制器中的DispatchesJobstrait(该trait在调整器基类Controller.php中引进)提供的dispatch方法手动分发任务:

php artisan make:job SendEmail

user = $user; } /** * 执行队列的方法 比如发送邮件 * * @return void */ public function handle() { $user = $this->user; Mail::raw('这里填写邮件的内容',function { // 发件人 $message->from('your_email@163.com', 'yourname'); // 收件人的邮箱地址 $message->to; // 邮件主题 $message->subject; }}

注:要保管任务试行成功,必要确定保证users表中id为1的记录email是多少个卓有功效邮箱。
自然你能够在调整器之外的别样地点使用dispatch分发任务,当然早前需求在那类中选拔use
Dispatches乔布斯。

以上正是那篇小说的全体内容了,希望本文的剧情对大家的读书或许干活能拉动一定的救助,假诺有疑难大家能够留言交换,多谢我们对台本之家的支撑。

上述操作将队列推送到暗中同意队列,即陈设文件中的default,当然你还足以将职分推送到钦点队列:

dispatch; }}

return [

批量拍卖职务的境况在我们开辟中是时常接收的,比方邮件群发,音讯通知,短信,秒杀等等,我们须求将以此耗费时间的操作放在队列中来拍卖,进而异常的大缩水Web央浼和对应的命宫。上边讲授下Laravel中队列的施用

运维成功后会在app/Jobs目录下生成叁个SendReminderEmail.php,大家改革其内容如下:

转载本站文章请注明出处:新萄京娱乐网址2492777 http://www.cdhbjs.com/?p=5095

上一篇:

下一篇:

相关文章