关于Laravel队列的困惑
我正在使用,我正在使用它。但我对这个过程有点困惑 我在关于Laravel队列的困惑,laravel,queue,jobs,ironmq,Laravel,Queue,Jobs,Ironmq,我正在使用,我正在使用它。但我对这个过程有点困惑 我在queue.php中将我的默认连接设置为'default'=>iron',并在同一文件中设置了iron设置 现在我用 $this->dispatch(new createEvents($data, $user)); 而createEvents类是按照Laravel教程中的说明创建的作业类。现在,当执行以下代码时 $this->dispatch(new createEvents($data, $user)); 它成功地在项目下
queue.php中将我的默认连接设置为'default'=>iron'
,并在同一文件中设置了iron设置
现在我用
$this->dispatch(new createEvents($data, $user));
而createEvents
类是按照Laravel教程中的说明创建的作业类。现在,当执行以下代码时
$this->dispatch(new createEvents($data, $user));
它成功地在项目下的ironmQ帐户中创建了一个队列
现在我的困惑开始了。我已将一些任务排入该队列,但现在如何运行该队列?如何运行排队的任务?我需要为它创建一些额外的代码还是需要为它做一些设置。请引导您可以执行
php artisan队列:侦听
它将启动所有列出的队列
或者,如果指定队列名称php artisan queue:listen queue\u name
不要忘记运行php artisan队列:failed table
。这将在您的数据库中创建失败的\u作业
表
所以,如果队列运行时出现任何错误,它将把失败的队列保存到数据库中
如果希望失败的队列获取插入数据库,请在运行时添加以下内容:
php artisan队列:侦听连接名称--trys=3
要运行失败的队列php artisan队列:重试所有
希望我能回答您的问题。您不需要转到服务器手动运行此命令,您需要有一个持续运行的进程,并执行这些作业
我会推荐“监督员”
此程序用于启动脚本并保持其运行,即使失败,它也会重新启动脚本(当然,直到出现一定数量的失败)
安装后,您可能应该创建此主管任务文件:
[program:queue]
command=php artisan queue:listen --tries=3 --env=your_environment
directory=/path/to/laravel
stdout_logfile=/path/to/laravel/app/storage/logs/supervisord.log
redirect_stderr=true
autostart=true
autorestart=true
一旦你的工作进入队列,根据你的问题,你有两个简单的选择:
在相同/不同的服务器上运行一个或多个队列侦听器(Laravel文档中建议使用supervisor,请参阅)
定期手动或自动运行队列工作程序(crontab)
php artisan队列:工作熨斗
此命令将从队列中获取一个作业并对其进行处理。您再次启动它–它将再获取一个,以此类推
如果您不进行额外的处理,并且您的队列驱动程序不是“同步”的,那么您的工作将永远看不到曙光
我的建议–在您的开发/测试机器上手动启动队列工作人员,并在生产服务器上使用supervisor
如果您的项目很小,并且不需要很好的可扩展性,您可能只需要切换到“同步”驱动程序(作业将立即处理)。没有必要使基础设施更加复杂,除非有真正的必要 如何使此过程自动化?是否有任何方法不需要在CLI中运行该命令?\n据我所知,可以使用queue:listen
但$this->dispatch(new createEvents($data,$user))代码>不保存本地数据库作业表中的任何内容。这总是空的,我从不使用ironmq
。正如我所知,如果您不使用数据库驱动程序,它将不会保存到您的数据库。这意味着你必须处理它。例如,我使用beanstalkd
来处理队列,除了failed_jobs
为什么“可能”?如果没有配置文件,它将无法工作;-):)我是在建议怎么做,而不是点餐