Я создаю несколько заданий с помощью команды, задания сохраняются в таблице заданий БД, но пока я выполняю команду 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));
}