【问题标题】:Confusions about Laravel Queues关于 Laravel 队列的困惑
【发布时间】:2026-02-11 13:35:02
【问题描述】:

我正在使用Laravel Queues,我正在使用IronMQ。但我对这个过程如何有点困惑。

我已经在queue.php as 'default' => 'iron' 中设置了我的默认连接,并且还在同一个文件中设置了 Iron 设置。

现在我用

 $this->dispatch(new createEvents($data, $user));

createEvents 类是按照 Laravel 教程中的说明创建的作业类。现在执行以下代码时

$this->dispatch(new createEvents($data, $user));

它成功地在我的项目下的 ironmQ 帐户中创建了一个队列。

现在我的困惑开始了。我已将一些任务排入该队列,但现在我将如何运行该队列?我将如何运行排队的任务?我需要为它创建一些额外的代码还是需要为它做一些设置。请指导

【问题讨论】:

    标签: laravel queue jobs ironmq


    【解决方案1】:

    你可以做php artisan queue:listen 它将启动所有列出的队列 或者如果您指定队列名称php artisan queue:listen queue_name

    别忘了运行php artisan queue:failed-table。这将在您的数据库中创建failed_jobs 表。

    所以如果队列运行时出现任何问题,它会将失败的队列保存到数据库中。

    如果您希望失败的队列插入数据库,请在运行时添加以下内容:

    php artisan queue:listen connection-name --tries=3

    运行失败的队列php artisan queue:retry all

    希望我能回答你的问题。

    【讨论】:

    • 我怎样才能自动化这个过程?有什么方法不需要在我的 CLI 中运行该命令?\
    • 据我所知需要使用queue:listen
    • 但是$this->dispatch(new createEvents($data, $user)); 没有在我的本地数据库作业表中保存任何东西。那总是空的
    • 我从不使用ironmq。我知道如果您不使用数据库驱动程序,它不会保存到您的数据库中。这意味着 ironmq 处理它。例如,我使用beanstalkd 处理队列,它从不将任何内容保存到数据库中,除了failed_jobs
    【解决方案2】:

    您不需要去您的服务器并手动运行此命令,您需要有能够继续运行的进程并执行这些作业。

    我会推荐“supervisord” http://supervisord.org/

    此程序用于启动脚本并使其保持运行,即使失败,它也会重新启动它(当然直到一定数量的失败)

    安装后,您可能应该创建这个主管任务文件:

    [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
    

    【讨论】:

    • 为什么是“可能”?如果没有配置文件,它将无法工作;-)
    • :) 我是在建议做什么,而不是订购 hh
    【解决方案3】:

    一旦你的工作在队列中,根据你的问题,你有两个简单的选择:

    1. 在相同/不同的服务器上运行一个或多个队列监听器(在 Laravel 文档中建议使用 supervisor,参见 sample configuration

    2. 定期手动或自动运行队列工作程序(crontab)

      php工匠队列:工作铁

    此命令将从队列中获取一份作业并进行处理。你再次启动它——它会再获取一个,依此类推。

    如果您不进行额外的处理并且您的队列驱动程序不是“同步”的,那么您的工作将永远不会看到曙光。

    我的建议 - 在您的开发/测试机器上手动启动队列工作器,并在生产服务器上使用主管。

    如果您的项目很小并且不需要很大的可扩展性,您可能只想切换到“同步”驱动程序(作业将立即处理)。没有必要让基础设施变得更复杂,除非真的有必要!

    【讨论】:

      最近更新 更多