【问题标题】:I can't dispatch delayed job in laravel我无法在 laravel 中调度延迟的工作
【发布时间】:2022-07-19 22:24:06
【问题描述】:

下面的代码不起作用。我认为我已经正确地完成了所有事情,但不知何故我没有工作。

... MyJob::dispatch($job)->onQueue('processing')->delay(Carbon::now()->addSeconds(30)); ...

MyJob.php

<?php

namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;

class MyJob implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels, Dispatchable;

    public function __construct($job)
    {
        // I described a logging code here and yes, there was change, but then...
    }

    public function handle()
    {
        // I described a logging code here, but there wasn't change
    }
}

问题是 dispatchNow() 确实起作用了,但是延迟调度不起作用。

我也正确设置了 .env(我猜)

.env 文件 ...

QUEUE_CONNECTION=database

...

配置/queue.php ...

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

...

请帮助我。任何建议都会很好。谢谢。

【问题讨论】:

  • 您可以尝试通过添加 ->onConnection('database') 在调度中指定连接,但这不是必需的,您可能需要清除缓存或更改回退驱动程序到“数据库”以及您的 queue.php 。另外,在同步调度时,请使用 dispatchSync 方法,因为 dispatchNow 方法已弃用
  • 能否分享您的错误日志?
  • 感谢您的回复,Mr.Oskar Mikael。我只是尝试过,但也没有任何变化。还有其他方法吗?
  • 没有错误日志。它只是行不通。正如我所说的 dispatchNow 方法效果很好,但是带有延迟方法的 dispath 不能正常工作,没有错误。我怎样才能做到这一点?
  • 也许这对你有帮助:stackoverflow.com/a/31091730/9636400

标签: laravel delayed-job dispatch


【解决方案1】:

诊断步骤;

  1. 打开 tinker 并运行 config('queue') 并检查队列设置是否符合预期

  2. 在不运行队列工作者的情况下,将您的作业分派到队列中。打开您的数据库工具并检查作业表是否包含一条新记录。

  3. 延迟后使用php artisan queue:work 运行队列工作者,作业应该运行。

  4. 检查作业是否已从作业表中删除,并且 failed_jobs 表中没有任何内容。

【讨论】:

  • 如果我要永久开启队列工作服务,那么我必须使用supervisord吗?或者其他方式?
【解决方案2】:

您可以尝试按照上面的建议清除缓存。另外,也尝试重启队列

php artisan queue:restart

至于队列:工作问题。是的,如果您希望队列永久运行,supervisor 是一个不错的选择。示例配置如下。

[program:my-laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/to/project/artisan queue:work --queue=QUEUE_NAME--sleep=1 --tries=1
autostart=true
autorestart=true
numprocs=1
redirect_stderr=true
stdout_logfile=/path/to/log/file.log

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多