Задание Laravel Queue с ответом веб-службы - PullRequest
0 голосов
/ 19 сентября 2018

Я реализовал задания очереди в моих проектах 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

...