一:队列配置队列的配置文件放置在config/queue.php文件中,laravel框架中支持的队列驱动有:sync, database, beanstalkd, sqs, redis,null对应
顺晟科技
2023-02-26 09:26:14
105
队列配置文件放置在config/queue.php文件中,laravel框架支持的队列驱动程序为sync、database、beanstalk d、SQS、redis和
& AMP;# 039;default & amp# 039;=env(& amp;# 039;queue _ driver & amp# 039;& amp# 039;sync & amp# 039;)、//队列驱动器设置010-
////配置syns驱动程序
同步& amp# 039;=[
驱动程序& amp# 039;=& amp# 039;同步& amp# 039;
],
////配置数据库驱动程序
数据库& amp# 039;=[
驱动程序& amp# 039;=& amp# 039;数据库& amp# 039;
Table & amp# 039;=& amp# 039;jobs & amp# 039;//用于配置数据库驱动程序的数据库
Queue & amp# 039;=& amp# 039;default & amp# 039;
Retry _ after & amp# 039;=90,//指定处理任务后认为失败的最长秒数。例如,如果将此选项设置为90,则不会删除任务,只要继续运行90秒,就会再次将其释放到队列中。
],
//beanstalkd驱动程序配置
Beanstalkd & amp# 039;=[
驱动程序& amp# 039;=& amp# 039;beanstalk d & amp# 039;
主机& amp# 039;=& amp# 039;localhost & amp# 039;//使用beanstalkd驱动程序地址
Queue & amp# 039;=& amp# 039;default & amp# 039;
Retry _ after & amp# 039;=90,//指定处理任务后认为失败的最长秒数。例如,如果将此选项设置为90,则不会删除任务,只要继续运行90秒,就会再次将其释放到队列中。
Block _ for & amp# 039;=0,
],
//sqs驱动器配置
Sqs & amp# 039;=[
驱动程序& amp# 039;=& amp# 039;SQS & amp# 039;
key & amp;# 039;=env(& amp;# 039;AWS _ access _ key _ id & amp# 039;),
Secret & amp# 039;=env(& amp;# 039;AWS _ secret _ access _ key & amp# 039;),
Prefix & amp# 039;=env(& amp;# 039;SQS _ prefix & amp# 039;& amp# 039;https://SQS . us-east-1 . amazonaws . com/your-account
Queue & amp# 039;=env(& amp;# 039;SQS _ queue & amp# 039;& amp# 039;your-queue-name & amp;# 039;),
Region & amp# 039;=env(& amp;# 039;AWS _ default _ region & amp# 039;& amp# 039;us-east-1 & amp;# 039;),
],
//redis驱动器配置
Redis & amp# 039;=[
驱动程序& amp# 039;=& amp# 039;redis & amp# 039;
Connection & amp# 039;=& amp# 039;default & amp# 039;//使用的连接redis和redis配置位于config/database.php文件中
Queue & amp# 039;=env(& amp;# 039;redis _ queue & amp# 039;& amp# 039;default & amp# 039;),
Retry _ after & amp# 039;=90,
Block _ for & amp# 039;=空,
],
]、
要使用数据库驱动程序,必须创建队列驱动程序表
Php artisan队列:table
Php artisan migrate执行上述命令后,发现jobs表将添加到数据库中
:要使用
redis驱动程序,必须安装predis/predis扩展
Composer require pred is/pred is:要使用
Amazon SQS驱动程序,必须安装aws/aws-sdk-php扩展
composer require AWS/AWS-SDK-PHP
Beanstalkd驱动程序要求安装pda/pheanstalk扩展
composer require PDA/pheanstalk
PHP artisan make:job test jobs运行上述命令创建队列作业类时,将在app/jobs目录中生成test jobs
简单队列作业类实例:
?嗯?PHP
namespaceapp \ jobs;
Use App \ Models \ blog \ User
Use Illuminate \ Bus \ Queueable
use illuminate \ queue \ serializes models;
use illuminate \ queue \ interactswithqueue;
use illuminate \ contracts \ queue \ should queue;
use illuminate \ foundation \ bus \ dispatch able;
class test jobs implements should queue
{
Use dispatch able、interactswithqueue、queue able和serializes models
/* *
*最大操作尝试次数。
*
* @var int
*/
public $ tries=5;
/* *
*作业运行超时。
*指定Laravel queue processor必须终止的最长运行持续时间
* - timeout必须始终比retry_after短几秒以上。这样,在任务过程失败之前,总会被杀死。
* -如果timeout选项大于retry_after组态选项,作业可执行两次
*
* @var int
*/
Public $ timeout=120
公共信息基金;
/* *
* Create a new job instance。
*
* @return void
*/
public function _ _ construct($ info)
{
//
$ this-info=$ info;
}
/* *
* Execute the job。
*
* @return void
*/
Public function handle()
{
//
$ User=new User();
$ user-user _ no=$ this-info[& amp;# 039;user _ no & amp# 039;];
$ user-user _ name=$ this-info[& amp;# 039;user _ name & amp# 039;];
$ user-save();
}
}
$info=[
User _ no & amp# 039;=& amp# 039;006 & amp# 039;
User _ name & amp# 039;=& amp# 039;testName & amp# 039;
];
TestJobs:dispatch($ info);
test jobs:dispatch($ info)-delay(carbon:now()-addminutes(10));//
test jobs:dispatch($ info)-on queue(& amp;# 039;processing & amp# 039;);//是默认驱动处理队列
test jobs:dispatch($ info)-on connection(& amp;# 039;redis & amp# 039;)的意思。使用基于//redis的默认队列
test jobs:dispatch($ info)-on connection(& amp;# 039;redis & amp# 039;)-on queue(& amp;# 039;)//基于redis的处理队列:运行
PHP artisan queue:work后,用户表可以看到user_no为006,user_name为testName。此时,PHP artisan queue# 039;default & amp# 039;因为队列正在接收,所以数据库中不会添加数据。
PHP artisan queue:work redis-queue=& amp;# 039;processing & amp# 039;//redis表示指定驱动程序processing指定队列
PHP artisan queue
Php artisan migrate在执行上述命令后,将failed_jobs表添加到数据库中以存储失败的作业信息,并将failed方法添加到TestJobs类中以处理失败的队列。
/* *
*要处理的失败任务。
*
* @param Exception $exception
* @return void
*/
public function failed(exception $ exception)
{
//向用户发送失败通知等.
}要注册每当队列操作失败时调用的事件,可以在Laravel的app/providers/appservice provider . PHP文件中将回调函数附加到此事件中。
/* *
*为所有应用程序启动服务。
*
* @return void
*/
Public function boot()
{
queue:failing(function(job failed $ event){
//$事件-连接name
//$事件-操作
///$event-exception
});
}
queue:work命令将继续运行,直到手动停止或关闭控制台。queue:要在后台永久运行work命令,可以使用流程监控工具Supervisor在后台永久运行
Supervisor安装参考:https://segmentfault.com/a/11.
/etc/super visord . conf增加到文件的最后一行
Files=supervisord.d/*。在ini
/etc/super visord . d/目录中。创建ini文件
[计划:标签-工作人员]
process _ name=%(program _ name)s _ %(process _ num)02d
command=PHP/home/forge/app . com/artisan queue:work database-sleep=3-tries=3 #
Autostart=true
Autorestart=true
User=forge
Numprocs=8 #numprocs命令要求Supervisor运行和监视8个queue:work进程
Redirect_stderr=true
stdout _ log file=/home/forge/app . com/worker . log
system CTL start supervisor d . servisor
Supervisorctl update
Supervisorctl reload
Supervisor CTL start laravel-工作人员