Должен ли я реализовать shouldQueue для каждого отдельного уведомления

У меня есть класс работы под названием NotifyUsersJob, этот класс, конечно же, реализует интерфейс shouldQueue, который является классом очереди по умолчанию, который дает мне Laravel. В методе handle у меня есть такая логика.

Notification::send($this->users, new NotifyUser($this->message));

В классе уведомлений NotifyUser я отправляю выброс уведомления WebPushChannel. Мой вопрос заключается в том, следует ли мне также реализовать shouldQueue в классе NotifyUser или нет, и если я должен это сделать, почему? Кстати, все работает нормально, оба работают хорошо, но я хотел бы знать, как это сделать правильно.


person Mustafa Omar    schedule 21.01.2020    source источник


Ответы (1)


Это зависит от того, чего вы пытаетесь достичь. Если вы хотите запускать уведомление в фоновом режиме, тогда да. Использование очереди should создает задание, которое обрабатывается в фоновом режиме, так что вам не нужно ждать, пока оно будет обработано.

Но если вы думаете, что ваше приложение может выйти из строя в какой-то момент, вы не сможете сразу же получить ошибку. вам нужно будет извлечь из таблицы неудачных заданий, если вы используете базу данных для очереди. Так что мой улов будет.

  1. Если вы считаете, что для обработки вашего уведомления может потребоваться некоторое время, используйте shouldqueue, чтобы оно работало в фоновом режиме, а ваше приложение отставало
  2. Если вы думаете, что вам нужно мгновенно получать ошибки, если уведомление не сработало, не используйте shouldQueue.
person Deepesh Thapa    schedule 21.01.2020
comment
Спасибо за ваш ответ, у меня возникла идея, на самом деле я отправляю тысячи тысяч push-уведомлений, поэтому это займет так много времени, поэтому я думаю, что мне следует реализовать shouldQueue для защиты сервера от сбоя, потому что без shouldQueue сервер будет выполнять все уведомления одно за другим очень быстро, что может привести к сбою сервера, но с shouldQueue сервер выполнит их тихо, и это то, что мне нужно, я правильно понял? - person Mustafa Omar; 21.01.2020
comment
Да Если очередь будет работать в фоновом режиме. Поэтому, если у вас одновременно отправляется масса уведомлений, вы всегда должны использовать shouldqueue. Также укажите попытки в вашей команде запуска расписания. Сделайте 3 или 4 попытки, чтобы в случае прерывания уведомления оно продолжило обработку следующего как можно скорее. Я бы рекомендовал использовать Redis для хранения вашего задания в очереди. - person Deepesh Thapa; 21.01.2020