В laravel 6 очередь останавливается автоматически после выполнения нескольких заданий, но не всех - PullRequest
0 голосов
/ 03 ноября 2019

Я создаю несколько заданий с помощью команды, задания сохраняются в таблице заданий БД, но пока я выполняю команду php artisan queue:work, очередь останавливается после выполнения нескольких заданий. все работы не выполняются. нет ошибок в файле журнала. Кто-нибудь может помочь мне выяснить причину? Я пытался увеличить значение времени ожидания как php artisan queue:work --timeout=300, но все еще не работает.

Обновление

Класс задания

use Illuminate\Support\Facades\DB;
use Illuminate\Contracts\Queue\ShouldQueue;

class CreateContent implements ShouldQueue
{
    public $contentType;

    public function __construct($type)
    {
        $this->contentType = $type;
    }

    public function handle()
    {
        $this->generateContentData($this->contentType);
    }

    // generate
    public function generateContentData($content_type)
    {
        $resource = str_replace("_", "", ucwords($content_type->name, " /_"));

        // process table name
        $source_table = 'npf content ' . $content_type->name;
        $source_table = str_replace(' ', '_', $source_table);
        $source_domain_table = $source_table . '_domain';
        $tenant_table = 'np contents ' . $content_type->name;
        $tenant_table = str_replace(' ', '_', $tenant_table);

        $data = DB::connection('source')
            ->table($source_table)
            ->join($source_domain_table, $source_table . '.id', '=', $source_domain_table . '.node_id')
            ->select($source_table . '.*', $source_domain_table . '.domain_id')
            ->get();


        // transform data
        $transformer = "\\App\\Http\\Resources\\Contents\\{$resource}Resource";
        // collect data
        $content_data = $transformer::collection($data)->chunk(500);
        // process content data
        foreach ($content_data as $data) {

            // insert content data
            DB::connection('tenant')->table($tenant_table)->upsert($data['content'], 'id');
            // insert file data
            if (!empty($data['file'])) {
                DB::connection('tenant')->table('system_files')->upsert($data['file'], 'id');
            }
            // insert translate data
            DB::connection('tenant')->table('rainlab_translate_attributes')->upsert($data['translate'], 'id');
        }
    }
}

Конфигурация очереди

QUEUE_CONNECTION = база данных

Отправка задания

Задания отправляются с помощью команды

...
foreach ($content_types as $content_type) 
{
   dispatch(new CreateContent($content_type));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...