Я использую драйвер базы данных, чтобы поставить в очередь свои задания.Мне нужно вызвать команду ремесленника из очереди работ, и когда работа будет завершена, мне нужно удалить ее из очереди.Это код моего контроллера, в который я добавляю задание в очередь
dispatch((new SendNewsletter())->onQueue('newsletter'));
Это мое задание в очереди
<?php
namespace App\Jobs;
use App\Console\Commands\Newsletter;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SendNewsletter 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()
{
app()->make(Newsletter::class)->handle();
}
}
Команда мастера, которую мне нужно вызвать: App\Console\Commands\Newsletter
и когда задание заканчивается, это должно удалить его из очереди.Это класс AppServiceProvider
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot() {
Queue::after(function ($event) {
if ($event->job->queue == 'newsletter') {
$event->job->delete();
}
});
}
. Задание корректно добавляется в очередь базы данных, и при запуске php artisan queue:work
задание вызывается несколько раз бесконечно.кажется, что обратный вызов Queue :: after никогда не вызывается.Есть идеи, что мне не хватает?