laravel 9 计划作业已执行但未排队

laravel 9 scheduled job executed but not queued

我在将 laravel 从 8 升级到 9 后发现了一个奇怪的行为。我有一个执行某些作业的调度程序。

Kernel.php:

$schedule->job(new ImportAzApplications, 'imports')
    ->everyFiveMinutes()
    ->onOneServer()
    ->onFailure(function () {
        Log::error('Scheduled "ImportAzApplications" failed');
    });
$schedule->job(new ImportServicePrincipals, 'imports')
    ->everyFiveMinutes()
    ->onOneServer()
    ->onFailure(function () {
        Log::error('Scheduled "ImportServicePrincipals" failed');
    });

调度程序将由 kubernetes 中的 cron 作业执行。在artisan schedule:run命令将每5秒执行一次。

日志:

[2022-04-23T10:55:06+00:00] Running scheduled command: App\Jobs\ImportServicePrincipals
[2022-04-23T10:55:06+00:00] Running scheduled command: App\Jobs\ImportAzApplications

现在我希望 imports 队列中有两个工作除外。我愿意。但只在我的开发机器上,而不是在登台服务器上。

其中一个职位是这样的:

class ImportAzApplications implements ShouldQueue, ShouldBeUnique
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $instance = new AzureApplications();
        $params = $instance->azApplicationImportParams();
        try {
            $instance->import($params);
            Log::debug('ImportAzApplications: Processing AzureApplications::importAzApplications');
        } catch (Exception $exception) {
            Log::error('ImportAzApplications: '.$exception->getMessage(), $params);
        }
    }
}

我很确定这是一件超级简单的事情,我看不到 atm,但现在我运行没有想法,希望有人有更多的想法

非常感谢

已编辑

周末发生了一些神奇的事情,作业根据新日志执行。我将在 kubernetes 上进一步研究巫毒魔法。

我不得不向社区道歉。问题实际上是由管道工作流程引起的。

我 运行 laravel kubernetes。有多个 pod 可用于不同的练习。

app

实际的laraval应用程序

queue

使用php artisan queue:work --queue=imports命令

处理队列中作业的具有幻灯片不同配置的相同容器映像

jobs

使用 App\Console\Kernel 中定义的 php artisan schedule:run 命令每分钟执行计划作业的 kubernetes 作业

一旦将新版本推送到注册表,kubectl set env 命令会设置新的构建版本,这会强制 app Pod 获取新的容器映像。这是定义了kubernetes策略。

不过queue运行还是老样子。我强制 queue 获取最新图像(没有 voodoo-magic)和执行的作业。

感谢所有花时间调查并尝试重现此行为的人。这并不容易。

干杯!