作业未调度到作业表 Laravel

问题描述 投票:0回答:3

我正在分派一个作业,根据我的 .env 配置,它应该进入作业表 (

QUEUE_DRIVER=database
)

但是,例如,作业表中没有出现任何内容,并且作业甚至没有在同步模式下运行。我看过

queue:listen
,Laravel 日志文件,failed_jobs 表也为空。请帮助我,我的工作没了

OBS: 更改 .env 文件后,我正在运行

artisan config:clear
,然后重新启动 PHP FPM 服务

我注意到的一件事是,当我将 QUEUE_DRIVER 设为

sync
时,它会运行我已分派的所有作业,即使它们没有进入作业表

我失去了什么吗?

laravel queue driver jobs
3个回答
0
投票

我今天在 lumen 8.x 中遇到了同样的问题。 我正在使用

dispatch(new ExampleJob);
排队,所以在花了一些时间谷歌搜索但没有成功后,我决定用
dispatch(new ExampleJob);
替换
Queue::push(new ExampleJob);
。 我的 vscode 代码编辑器抛出未知类错误,因此我在类顶部添加了
use Illuminate\Support\Facades\Queue;
,然后作业开始正常排队。 有关更多详细信息,请参阅调度作业部分。我希望这对那里的人有帮助。


0
投票

如果您将队列与数据库驱动程序一起使用,并且您的项目处理多个数据库连接, 也许您的队列表不在默认连接中,在这种情况下,您应该确保在队列连接配置中正确设置数据库连接配置。

在我的例子中,将作业添加到队列时,请求达到了最大执行时间。

多次检查队列配置后,我注意到使用“队列连接”的“数据库连接”设置不正确。

在我的.env中:

QUEUE_CONNECTION=database

在配置/队列中:

'default' => env('QUEUE_CONNECTION', 'database'),

'connections' => [

         'sync' => [
             'driver' => 'sync',
         ],

         'database' => [
             'driver' => 'database',
             'connection' => 'sync', //<-- "sync" is my database connection name, it could also be "mysql" or "my_own_custom_database_connection", enter your DB connection that has your jobs table
             'table' => 'jobs',
             'queue' => 'default',
             'retry_after' => 90,
             'after_commit' => false,
         ],

** 注意关键connections.database.connection 中的注释,它说:

“sync”是我的数据库连接名称(但它不是默认的 项目),也可以是“mysql”或 “my_own_custom_database_connection”,输入您的数据库连接 你的工作表。

我知道,通过错误地指定连接,请求永远不会结束,并达到 max_execution_time


-1
投票

当您将 QUEUE_DRIVER 设置为同步时,调度的作业将立即运行,并且不会插入到作业表中。 因此,您应该将其设置为“数据库”以获得所需的操作。

© www.soinside.com 2019 - 2024. All rights reserved.