Для реализации системы очередей необходимо выполнить эти шаги.
- при нажатии кнопки маршрута (/ usertask / executeAction)
В вашем контроллере предположим (UserTaskController.php)
1 - добавить пространство имен для ваших рабочих мест.
<?php
use App\Jobs\ProcessTask; // job class that will be created later
class UserTaskController extends Controller
{
// controllers function
function performAction()
{
...
...
...
// code to place background task
$data = [];
$job = ( new ProcessTask($userId, $data))->onQueue('ProcessTask');
if ($this->dispatch($job)) {
info('job dispatched');
} else {
info('job dispatch failed');
}
// code to place background task ends
}
теперь создайте файл задания. (ProcessTask.php) внутри вашей папки заданий.
ProcessTask.php
--------
<?php
namespace App\Jobs;
use Log;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class ProcessTask extends Job implements ShouldQueue
{
use InteractsWithQueue,
SerializesModels;
/**
* Create a new command instance.
*
* @return void
*/
protected $userId;
protected $data;
public function __construct($userId, $data)
{
$this->userId = $userId;
$this->data = $data;
}
/**
* Execute the command.
*
* @return void
*/
public function handle()
{
try {
// perform your task
/*
$this->userId
$this->data
*/
return true;
} catch (\Exception $e) {
Log::error('ProcessTask:: Exception occured ');
Log::error($e);
$this->release(); //release the job back to queue, as attempts increase fail to be
return false;
}
}
public function failed()
{
Log::info('ProcessTask :: failed ends');
}
}
?>
/// теперь вы можете запускать свои задания в терминале ()
php arrtisan queue:listen --queue=ProcessTask --timeout=600
в вашем терминале (или вы можете разместить это в супервизоре)
настройки, связанные с драйвером очереди -
/var/www/html/infinito/config/queue.php
make QUEUE_DRIVER as database.
'default' => env('QUEUE_DRIVER', 'database'),