Это нормальное и ожидаемое поведение. Согласно документации
Поскольку обработчики очередей являются долгоживущими процессами, они не будут принимать изменения в вашем коде без перезапуска. Итак, самый простой способ развернуть приложение с использованием обработчиков очереди - это перезапустить работников во время процесса развертывания. Вы можете корректно перезапустить всех воркеров, введя команду queue: restart: php artisan queue:restart
Эта команда проинструктирует всех работников очереди корректно «d ie» после того, как они закончат sh обрабатывает свое текущее задание, чтобы существующие задания не были потеряны.
- Что делает
queue:restart
, так это установка текущей метки времени на значение illuminate:queue:restart
key. - Когда очереди будут израсходованы процессами (
php artisan queue:work
), он получит это значение временной метки из ключа illuminate:queue:restart
, а после того, как задание будет завершено , оно получит значение снова из того же ключа. - Он сравнивает, является ли значение до обработки задания таким же, как после обработки задания.
- Если оно другое, то оно будет остановить долгоживущий процесс.
Это эффективный способ (поскольку Redis очень быстр для такого рода сценариев ios), чтобы определить, был ли изменен код и должен ли вакансии должны быть обновлены для этого кода c hange.
Причина, по которой он сохраняет значение в Redis, «скорее всего» ваш драйвер кеша - Redis. Если вы измените его на file
, вместо этого он будет сохранен в файле и будет делать запрос на получение в этот файл.
Вот методы, связанные с ;
protected function stopIfNecessary(WorkerOptions $options, $lastRestart, $job = null)
{
if ($this->shouldQuit) {
$this->stop();
} elseif ($this->memoryExceeded($options->memory)) {
$this->stop(12);
} elseif ($this->queueShouldRestart($lastRestart)) {
$this->stop();
} elseif ($options->stopWhenEmpty && is_null($job)) {
$this->stop();
}
}
protected function queueShouldRestart($lastRestart)
{
return $this->getTimestampOfLastQueueRestart() != $lastRestart;
}
protected function getTimestampOfLastQueueRestart()
{
if ($this->cache) {
return $this->cache->get('illuminate:queue:restart');
}
}