Почему некоторые задания очереди в Laravel повторяются дважды?

Я использую цепочку заданий и иногда обнаруживаю, что задания запускаются снова. Вот пример моего кода:
<?php

namespace App\Http\Controllers;

use App\Jobs\SendInvoice;
use Illuminate\Http\Request;
use JustIversen\JobChainer\JobChainer;

class NotificationsController extends Controller
{
    public function bulk_sending_by_type(Request $request)
    {
        $numbers = $request->numbers;
        $chain = new JobChainer;
        foreach ($numbers as $key => $number){
            $chain->add(SendInvoice::class, $number);
        }

        $chain->dispatch();
        return response()->json([]);
    }
}

Файл задания
<?php

namespace App\Jobs;

use App\Helper\InvoicesHelper;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class SendInvoice implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    public $tries = 1;
    protected $number;
    public $queue;
    public $timeout = 500;

    public function __construct($number )
    {
        $this->queue = 'invoices';
        $this->number = $number;
    }

    public function handle()
    {
        InvoicesHelper::send_invoice($this->number);
        sleep(30);
    }
}

Конфиг
'connections' => [

    'sync' => [
        'driver' => 'sync',
    ],

    'invoices' => [
        'driver' => 'database',
        'table' => 'jobs',
        'queue' => 'invoices',
        'retry_after' => 520,
    ],
],

Я использую supervisor для работы с очередью.
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/sites/test.fo/public/artisan queue:work --queue=invoices --tries=1
autostart=true
autorestart=true
user=main
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/sites/test.fo/public/worker.log
stopwaitsecs=9000

Я задал количество попыток с помощью tries, но это не работает. Я также добавил --tries для команды.
И как сказано в документации, чтобы не запускать задания дважды, таймаут должен быть меньше параметра retry_after, что я и сделал. В чем может быть проблема?
  • Вопрос задан
  • 303 просмотра
Пригласить эксперта
Ответы на вопрос 1
@jazzus
Количество попыток не гарантирует. юзер может 10 раз на кнопку нажать и везде будет 1 попытка. попробуй добавить уникальность с номером инвойса https://laravel.com/docs/8.x/queues#unique-jobs
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы