Ниже приведено описание того, что происходит, когда я запускаю очередь php artisan: слушайте, и за моим рабочим столом есть только одна работа

enter image description here

И это мой код:

public function handle(Xero $xero)
{
        $this->getAndCreateXeroSnapshotID();
        $this->importInvoices($xero);
        $this->importBankTransaction($xero);
        $this->importBankStatement($xero); 
        $this->importBalanceSheet($xero);
        $this->importProfitAndLoss($xero);

}
8
Bathulah Mahir 22 Фев 2018 в 12:32

4 ответа

Лучший ответ

Чтобы задание вышло из очереди, оно должно достигнуть конца функции дескриптора - без ошибок и исключений.

Должно быть что-то ломается внутри одной или нескольких ваших функций.

Если во время обработки задания возникает исключение, задание будет автоматически возвращено в очередь, поэтому его можно повторить. https://laravel.com/docs/5.8/queues

Такое же поведение может быть достигнуто с

$this->release()

Если вы не можете понять, что ломается, вы можете настроить работу только один раз. Если возникнет ошибка, задание будет считаться неудачным и будет помещено в очередь невыполненных заданий.

Максимальное количество попыток определяется используемым переключателем --tries по команде queue:work Ремесленник. https://laravel.com/docs/5.8/queues

php artisan queue:work --tries=1

Если вы используете очередь базы данных, (отлично для отладки) выполните эту команду, чтобы создать таблицу очередей с ошибками

php artisan queue:failed

Наконец, чтобы выяснить, что не так с вашим кодом. Вы можете поймать и записать ошибку.

public function handle(Xero $xero)
{
    try{
        $this->getAndCreateXeroSnapshotID();
        $this->importInvoices($xero);
        $this->importBankTransaction($xero);
        $this->importBankStatement($xero); 
        $this->importBalanceSheet($xero);
        $this->importProfitAndLoss($xero);
    }catch(\Exception $e){
        Log::error($e->getMessage());
    }
}

Вы также можете настроить канал регистрации ошибок на slack, bugsnag или любой другой. Просто не забудьте проверить это. Пожалуйста, не обижайтесь, это нормально облажаться при работе с очередями Laravel. Как вы думаете, я попал сюда?

16
Marc Barbeau 15 Авг 2019 в 04:37

Решение, которое помогло мне удалить задание после помещения их в очередь.

Рассмотрим, например,

class SomeController extends Controller{
  public function uploadProductCsv(){
   //process file here and push the code inot Queue
   Queue::push('SomeController@processFile', $someDataArray); 
  }

  public function processFile($job, $data){
    //logic to process the data
    $job->delete(); //after complete the process delete the job
  }

}

Примечание: это реализовано для laravel 4.2

2
Amit Sharma 30 Мар 2018 в 14:36

В моем случае проблема была в полезной нагрузке, я создал переменную private , но она должна быть protected .

class EventJob implements ShouldQueue
{       
    use InteractsWithQueue, Queueable, SerializesModels;

    // payload
    protected $command;
    // Maximum tries of this event
    public $tries = 5;

    public function __construct(CommandInterface $command)
    {
        $this->command = $command;
    }

    public function handle()
    {
        $event = I_Event::create([
            'event_type_id' => $command->getEventTypeId(),
            'sender_url' => $command->getSenderUrl(),
            'sender_ip' => $command->getSenderIp()
        ]);

        return $event;
    }
}
1
José Lozano Hernandez 25 Окт 2018 в 14:33

Ларавел пытается запустить работу снова и снова.

php artisan queue:work --tries=3

Верхняя команда будет пытаться запустить задания только 3 раза.

Надеюсь это поможет

5
Adnan Mumtaz 22 Фев 2018 в 09:40