Я работаю над версией lumen 5.4. Я работаю над выполнением такой задачи, как (отправка электронной почты) всякий раз, когда обновляется статус модели. Я вызвал событие в наблюдателе модели, а слушатель отправил очередь. Но проблема, с которой я столкнулся, заключается в следующем: модель обновляется нормально, но задание не отправляется все время. Он отправляется только когда-нибудь. Я зарегистрировал каждый шаг и решил, что иногда дескриптор задания не вызывается. У меня php очередь ремесленников: звонят на работу и большинство вакансий. Драйвер очереди - это база данных.
Вот несколько фрагментов кода:
public function updated( Model $model ) {
$dirty = $model->getDirty();
$keys = array_keys($dirty);
if(in_array('status', $keys)){
event(new ModelStatusUpdate($model));
}
}
<?php
namespace App\Events;
class ModelStatusUpdate
{
public $model;
public function __construct($model)
{
$this->model= $model;
}
}
//In event service provider:
protected $listen = [
'App\Events\ModelStatusUpdate' => [
'App\Listeners\ModelStatusUpdateListener',
],
];
//In listener
public function handle(ModelStatusUpdate $event)
{
try{
$model= $event->model;
dispatch((new CallJob($model)));
}catch (\Exception $exception){
Log::error(json_encode(['error' =>$exception->getMessage(), 'line' => $exception->getLine(), 'file' => $exception->getFile()]));
}
}
class CallJob extends Job
{
public $timeout = 50;
protected $guzzle;
public function __construct($model)
{
$this->model= $model;
Log::info("Inside job constructor");
}
public function handle()
{
Log::info("Inside job handle");
}
}