18910140161

laravel队列失败了如何处理 laravel实施队列

顺晟科技

2023-02-26 09:26:14

105

一:队列配置

队列配置文件放置在config/queue.php文件中,laravel框架支持的队列驱动程序为sync、database、beanstalk d、SQS、redis和

1:队列相关配置

(1):队列驱动配置

& 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;=空,

],

]、

(2):不同驱动相关配置

2:不同队列依赖

要使用数据库驱动程序,必须创建队列驱动程序表

Php artisan队列:table

Php artisan migrate执行上述命令后,发现jobs表将添加到数据库中

:要使用

(1):数据库驱动

redis驱动程序,必须安装predis/predis扩展

Composer require pred is/pred is:要使用

(2):redis驱动

Amazon SQS驱动程序,必须安装aws/aws-sdk-php扩展

composer require AWS/AWS-SDK-PHP

(3):Amazon SQS驱动

Beanstalkd驱动程序要求安装pda/pheanstalk扩展

composer require PDA/pheanstalk

(4):Beanstalkd驱动

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);

1:默认分发

test jobs:dispatch($ info)-delay(carbon:now()-addminutes(10));//

2:延时分发

test jobs:dispatch($ info)-on queue(& amp;# 039;processing & amp# 039;);//是默认驱动处理队列

3:指定队列分发

test jobs:dispatch($ info)-on connection(& amp;# 039;redis & amp# 039;)的意思。使用基于//redis的默认队列

4:指定驱动分发

test jobs:dispatch($ info)-on connection(& amp;# 039;redis & amp# 039;)-on queue(& amp;# 039;)//基于redis的处理队列:运行

5:指定驱动和队列分发

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管理队列

Supervisor安装参考:https://segmentfault.com/a/11.

1:Supervisor安装

2:配置Supervisor

/etc/super visord . conf增加到文件的最后一行

Files=supervisord.d/*。在ini

(1):配置supervisord.conf

/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

(2):队列进程配置

system CTL start supervisor d . servisor

Supervisorctl update

Supervisorctl reload

Supervisor CTL start laravel-工作人员

  • TAG:
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航