Я реализовал задания очереди в моих проектах lumen v5.6.Для работы в очереди я использую драйвер базы данных.Но проблема в том, что когда я отправляю задание и помещаю метод сна на 15 секунд в метод job (), то ответ API задания удерживается в течение 15 секунд, пока не будет запущено все задание.Но я должен немедленно отправить ответ API, когда отправляю задание в фоновом режиме.
пространство имен App \ Jobs;
use App \ Helpers \ NotificationProcess;
classSendPushNotification расширяет задание {
protected $queueData;
protected $activity;
protected $activity_user;
protected $post;
protected $mentions;
protected $noti;
protected $mention_activities;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($data) {
\Log::info("Queue Start Time:: " . microtime());
$this->queueData = $data;
$this->activity = $data['activity'];
$this->activity_user = $data['user'];
$this->post = $data['post'];
$this->mentions = $data['mentions'];
$this->mention_activities = $data['mention_activities'];
$this->noti = new NotificationProcess();
}
/**
* Execute the job.
*
* @return void
*/
public function handle() {
try {
\Log::info("wait for 15 seconds");
sleep(15);
$receiver = \App\Models\DeviceToken::getDeviceTokensByUsers([$this->post->user_id], $this->activity_user->id, $this->activity['domain']);
if (!$receiver->isEmpty() && !empty($this->activity))
$this->noti->sendCommentPushNotification($this->activity, $receiver[0]->toArray(), $this->activity_user);
if (!empty($this->mentions)) {
$receivers = \App\Models\DeviceToken::getDeviceTokensByUsers($this->mentions, $this->activity_user->id, 'M');
if (!$receivers->isEmpty() && !empty($this->mention_activities))
$this->noti->sendMentionPushNotifications($this->mention_activities, $receivers->toArray(), $this->activity_user);
}
\Log::info("==== Notifications sent ===");
return true;
} catch (\Exception $ex) {
\Log::info("Exception::".$ex->getMessage());
return false;
}
}
}
Теперь я просто хочу немедленно отправить ответ обратно в API, так как я отправляю задание для фонового процесса, оно не должно содержать ответ API.
Примечание: одна работа может быть обработана за 2 минуты, но это не должно влиять на ответ API