2015-07-28 9 views
0

У меня есть система очередей с моими работниками, написанная в Laravel 4.2. Я получаю исключение JOB_ID, не найденное исключение всякий раз, когда ремесленник пытается получить следующее готовое задание в очереди.JOB_ID NOT FOUND исключение Beanstalkd в PHP с использованием pda/pheanstalk в Laravel 4.2

их расследование я заметил следующее:

Если следующая готовая Работа имеет ID = 74, когда я бег очереди мастеровых: работа, она пытается подобрать следующую готовую работу с идентификатором 73 вместо 74 в результате в JOB_ID не найден исключение.

Я перезапустил beanstalkd несколько раз, но проблема сохраняется. Я также проверил TTR для каждого задания и установил его на 3600, но все равно не повезло.

Кто-нибудь испытал это раньше? Свернув библиотеку КПК Beanstalk, я заметил, что это происходит, когда класс ReleaseCommand вызывает метод отправки.

Кто-нибудь испытал это? Что может быть причиной этого? Спасибо заранее.

+0

Можете ли вы подтвердить, что вы успешно удалить работу после того, как он был обработан? Кроме того, какая версия Beanstalkd и библиотеки вы используете? –

ответ

1

Без надлежащего кода и даже с кодом трудно найти такую ​​проблему. Но мы были в прошлом, и я могу объяснить, как это должно работать, и когда это исключение будет выбрано.

Таким образом, рабочий, делает резерв для работы и удерживает его до тех пор, пока он не выполнит свою работу, или сервер beanstalkd не вернет его.

  1. Если вы видите работу Id 74, и когда вы запустите его, и вы видите это собирание идентификатора задания 73, вы должны убедиться, что нет urgent jobs, как это отличается от ready государственных заданий.
  2. Работник после этого хочет удалить задание. Но он может сделать, только если у него все еще есть резерв. Если работник не имеет резерва, это означает, что работа была убрана сервером beanstalkd, или выпуск был слишком скоро выполнен самим работником. Существует 60 секунд для TTR, время для решения, после чего Beanstalkd возвращает работу от вашего работника, поэтому не может ее удалить. Эти ситуации должны быть расположены в вашем коде.
  3. Используйте чудесную администратора консоли панели, чтобы помочь вам увидеть состояние рабочих мест и помочь в развитии https://github.com/ptrofimov/beanstalk_console
+0

Спасибо. Я, наконец, понял эту проблему. Когда рабочий выбирает задание из очереди, код открытия файла генерирует исключение, убивающее все. Теперь я случайно поймаю все исключения в системе. И поэтому код действительно продолжается. Теперь, когда возникает исключение, кажется, что структура удаляет его из очереди. Поэтому в строке, когда я пытаюсь удалить Job в конце прогона, в задании Job Job не задано. – user1821272