Команда Laravel Artisan в очереди не удаляет записи из таблицы очередей в базе данных - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь поставить команду в очередь в версии Laravel 5.8. Но запись задания в таблице базы данных не удаляется автоматически.

Я пробовал следующие вещи.

1. Непосредственно Отправьте команду ремесленника согласно документации здесь

Документация очереди ремесленника

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

2. Создайте задание и отправьте его в команду Art Call Call Call.

[Отправка]

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

[Job вызывает Artisan Command]

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;
}

Они оба работают отлично, проблема в том, что запись Job не удаляется из базы данных автоматически.

Если я удалю Artisan :: call из задания, оно будет автоматически удалено из базы данных.

Я также пытался вернуть true из самой команды и Job, но ни одна из них не работала.

Когда я запускаю

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

Но не удаляет саму запись очереди из таблицы базы данных. Это происходит только в том случае, если я запускаю в нем команду ремесленника.

[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;
    }

}

[Данные после выполнения задания выполняются следующим образом]

  • идентификатор - 1
  • очередь - upgrade_for_permissions
  • полезная нагрузка - данные полезной нагрузки
  • попытки - 1
  • reserved_at - 1570119771
  • available_at - 1570119767
  • create_at - 1570119767

[upgrade_permission.log] файл

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

Любые предложения будут полезны.

1 Ответ

0 голосов
/ 12 октября 2019

Проблема в том, что я отключаю одно соединение с базой данных для другого соединения. Это отключение вызывает проблемы.

Я подключил его к очереди Amazon SQS, и теперь все работает нормально.

...