За последние 24 часа нас посетили 17575 программистов и 1586 роботов. Сейчас ищут 1396 программистов ...

Очереди... Почему сервер ожидает завершения работы задания в очереди?

Тема в разделе "Laravel", создана пользователем xintrea, 30 авг 2019.

  1. xintrea

    xintrea Активный пользователь

    С нами с:
    25 фев 2019
    Сообщения:
    68
    Симпатии:
    0
    Народ, в общем я застрял. Вопрос про очереди.

    У меня есть боевой сервер и две машины разработчика. Рабочий каталог на всех трех машинах синхронизирован через Git. Из важного, в gitignore разве что .env. Очередь построена на MySql.

    На боевом сервере и первой машине разработчика очереди работают нормально. А вот на второй машине разработчика имеется проблема с очередью.

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

    Но и это еще не все. Плюс ко всему, в начало ответа, перед <!DOCTYPE html>, вываливается весь выхлоп скрипта.

    Я вообще не могу представить, почему один и тот же код ведет себя так по-особенному на этой машине.

    Запуск задания происходит банально:

    Код (Text):
    1.  
    2. $job = ( new CallSuperscript() );
    3. dispatch($job);
    Само задание примитивно:

    Код (Text):
    1.  
    2. public function handle() {
    3.  
    4.   $cmd = '/usr/bin/php ...path.../mySuperScript.php';
    5.   info($cmd); // Логирование
    6.   $resultCode=0;
    7.   system($cmd, $resultCode);
    8.  
    9.   if ($resultCode === 0) {
    10.   info('Job message: Call code no error');
    11.   } else {
    12.   info('Job message: Call code with error: '.$resultCode);
    13.   }
    14. }
    Почему при выполнении такого задания, сервер ничего не отдает пользователю, а ждет завершения задания?
    Почему в ответ засовывается выхлоп скрипта, запущенного в задании?
    Почему это происходит только на одной машине, на других двух - все в порядке?
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Есть синхронный драйвер у очередей
    --- Добавлено ---
    По-моему, как раз по дифолту в .env синхронный
     
  3. xintrea

    xintrea Активный пользователь

    С нами с:
    25 фев 2019
    Сообщения:
    68
    Симпатии:
    0
    Ага, разобрался. Забыл переключить

    QUEUE_DRIVER=sync

    на

    QUEUE_DRIVER=database