gpt4 book ai didi

kubernetes - laravel 9 预定作业已执行但未排队

转载 作者:行者123 更新时间:2023-12-05 04:30:43 24 4
gpt4 key购买 nike

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

内核.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);
}
}
}
  • 我启用了调试日志级别来获取调试日志
  • 我在本地成功运行了单元测试
  • 我使用 artisan schedule:list'、artisan schedule:run'、artisan schedule:test 和 `artisan queue:work 在声明服务器上验证了调度程序工作流 - -队列=进口'
  • 我通过 tinker 在线监控数据库:DB::table('jobs')->get()DB::table('failed_jobs ')->get()。两者都是空的
  • 我在 tinker (new ImportAzApplications)->handle() 中手动运行作业成功
  • 我在同一队列中成功执行了不同的作业(导出任务)

我很确定这是一个我看不到 atm 的 super 简单的东西,但现在我的想法已经用完了,希望有人有更多的想法

非常感谢

已编辑

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

最佳答案

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

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

应用

实际的laraval应用

队列

使用 php artisan queue:work --queue=imports 命令处理队列中的作业的同一容器镜像具有不同的配置

工作

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

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

但是 queue 使用旧图像运行。我已强制 queue 获取最新图像(无巫术)和执行的作业。

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

干杯!

关于kubernetes - laravel 9 预定作业已执行但未排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71979646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com