Я работал над очередью, пытаясь найти способ записи обработанных заданий в таблицу «process_jobs» так же, как сбойные задания хранятся в таблице «failed_jobs», что происходит автоматически. Я использую «базу данных» для подключения к очереди. Я попробовал два разных метода. Сначала я попытался расширить WorkCommand ('Illuminate \ Queue \ Console \ WorkCommand') в другом командном файле 'WorkerCommand'
<?php
namespace App\Console\Commands;
use Illuminate\Queue\Console\WorkCommand;
use Illuminate\Contracts\Cache\Repository as Cache;
use Illuminate\Queue\Worker;
use Illuminate\Queue\Events\JobFailed;
use Illuminate\Queue\Events\JobProcessed;
use Illuminate\Queue\Events\JobProcessing;
class WorkerCommand extends WorkCommand
{
protected function listenForEvents()
{
$this->laravel['events']->listen(JobProcessing::class, function ($event) {
$this->writeOutput($event->job, 'starting');
});
$this->laravel['events']->listen(JobProcessed::class, function ($event) {
$this->writeOutput($event->job, 'success');
\DB::table('processed_jobs')->insert([
'connection' => $event->connectionName,
'queue' => $event->job->getQueue(),
'payload' => $event->job->payload(),
'processed_at' => \Carbon\Carbon::Now()
]);
});
$this->laravel['events']->listen(JobFailed::class, function ($event) {
$this->writeOutput($event->job, 'failed');
$this->logFailedJob($event);
});
}
}
Это не сработало. А потом я попытался использовать рабочие события. Как подсказывает this do c, в функции загрузки моего AppServiceProvider я попытался:
public function boot()
{
Queue::after(function (JobProcessed $event) {
\DB::table('processed_jobs')->insert([
'connection' => $event->connectionName,
'queue' => $event->job->getQueue(),
'payload' => $event->job->payload(),
'processed_at' => \Carbon\Carbon::Now()
]);
});
}
, что также не работало. Я не мог найти что-нибудь еще. Заранее спасибо. Вот файл задания:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ProcessSleep implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
sleep(10);
}
}
Функция, которая добавляет задание в очередь:
public function dispatchSleep(){
ProcessSleep::dispatch();
return response()->json(['message'=>'Process added to queue']);
}