【问题标题】:Laravel Artisan command in queue does not remove entries from queue table in database队列中的 Laravel Artisan 命令不会从数据库中的队列表中删除条目
【发布时间】:2020-02-02 00:49:09
【问题描述】:

我正在尝试在 Laravel 5.8 版本中排队 artisan 命令。 但是数据库表中的作业条目不会自动删除。

我尝试了以下方法。

1.根据此处的文档直接调度工匠命令

Artisan queue documentation

Artisan::queue('set:store_permissions', [
            'app_id' => 1,
            'user_id' => 1
        ])->onConnection('database')->onQueue('upgrade_for_permissions');

2。创建 Job 并在 Job Call Artisan 命令中调度它。

[调度]

$d_t_s = new \stdClass();
$d_t_s->id = 1;
UpgradeDatabaseForPermissions::dispatch($d_t_s)->onConnection('database')->onQueue('upgrade_for_permissions');

[工作调用工匠指挥]

protected $user_id;
public $tries = 5;

public function __construct($d) {
    $this->user_id = $d->id;
    //
}
public function handle() {
    $user_id = $this->user_id;
    Storage::disk('local')->append('upgrade_permission.log', "Started :: user :: " . $user_id);
    $artisan = Artisan::call('set:store_permissions', [
                'app_id' => 1,
                'user_id' => $user_id
    ]);
    Storage::disk('local')->append('upgrade_permission.log', "End :: user :: " . $user_id . ' :: ');
    return true;
}

它们都可以完美运行,问题是作业条目不会自动从数据库中删除。

如果我从作业中删除 Artisan::call 它将自动从数据库中删除。

我也尝试从命令本身和 Job 中返回 true,但它们都不起作用。

当我跑步时

php artisan queue:work database --queue="upgrade_for_permissions"

输出如下

[2019-10-03 16:22:51][1] Processing: App\Jobs\UpgradeDatabaseForPermissions                                                                                                                     
[2019-10-03 16:22:52][1] Processed:  App\Jobs\UpgradeDatabaseForPermissions

但不会从数据库表中删除队列条目本身。 只有当我在其中运行 artisan 命令时才会发生这种情况。

[UpgradeDatabaseForPermissions::class]

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
use Artisan;
use Storage;

class UpgradeDatabaseForPermissions implements ShouldQueue {

    use Dispatchable,
        InteractsWithQueue,
        Queueable,
        SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    protected $user_id;
    public $tries = 5;

    public function __construct($d) {
        $this->user_id = $d->id;
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle() {
        $user_id = $this->user_id;
        Storage::disk('local')->append('upgrade_permission.log', "Started :: user :: " . $user_id);
        $artisan = Artisan::call('set:store_permissions', [
                    'app_id' => 1,
                    'user_id' => $user_id
        ]);
        Storage::disk('local')->append('upgrade_permission.log', "End :: user :: " . $user_id . ' :: ');
        return true;
    }

}

[作业完成后的数据如下]

  • id - 1
  • 队列 - upgrade_for_permissions
  • 有效载荷 - Payload data
  • 尝试 - 1
  • reserved_at - 1570119771
  • available_at - 1570119767
  • created_at - 1570119767

[upgrade_permission.log] 文件

Started :: user :: 1
End :: user :: 1 :: 

任何建议都会有所帮助。

【问题讨论】:

  • 您可以在问题处理后添加UpgradeDatabaseForPermissions class 和作业数据table 吗?
  • 已添加 请查看。 @RayannNayran
  • 您目前如何分派工作以及从哪里分派?
  • 目前根据第二个选项和来自工匠命令进行调度并且也从控制器尝试过。
  • 我试图在此处重现从 Job 调用 Artisan 命令的问题,但我不能。我认为您的 Artisan 命令有问题。

标签: php laravel laravel-5 queue jobs


【解决方案1】:

实际问题是我正在断开一个数据库连接以连接其他连接。 断开连接会导致问题。

我将它连接到 Amazon SQS 队列,现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 2020-03-27
    • 1970-01-01
    相关资源
    最近更新 更多