关于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
    为什么“可能”?如果没有配置文件,它将无法工作;-):)我是在建议怎么做,而不是点餐