2013-07-30 3 views
0

У меня есть beanstalkd setup. Я использую php-библиотеку pheanstalk для добавления рабочих мест и для моих работников.beanstalkd + pheanstalk rush condition

Добавление заданий работает правильно, и я регистрирую идентификатор задания в своей базе данных для последующего использования. Никакие идентификаторы работы не пропущены IE: они идут там последовательно пронумерованы: 1,2,3,4

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

Я не уверен, почему это произошло. Я просто использую цикл while с проверкой памяти + мой код задания для контроля за новой работой.

Вот начало этого кода.

while (1) { 
     $job = $this->pheanstalk->watch('my_tube')->ignore('default')->reserve(); 
     $job_decoded = json_decode($job->getData(), false); 

Вот вывод с консоли benstalk. Игнорируйте первую строку, поскольку это стандартная трубка, которую я не использую.

enter image description here

После добавления еще одного задания в очередь, общий объем incresses столбцов 4 и больше ничего не изменяется.

ответ

1

Я выяснил, что проблема была связана с тем, что первый работник сделал то, что должен был сделать, а затем сбой перед удалением задания.

Итак, следующий работник заберет его, и он не сможет перескочить на мой блок catch и обходить ошибку php, а затем удалить задание.

+0

Это одна из основных проблем, которые приходится решать при использовании очередей и рабочих - если они терпят неудачу, вы должны их поймать и поступать правильно - игнорирование ошибки и просто повторная попытка редко верны - это просто произойдет fail в следующий раз, а затем вы находитесь в бесконечном цикле. Подробное протоколирование может помочь вам помочь выяснить, что происходит. –

+0

Привет, привет, вопрос и ответ. Я начинаю использовать pheanstalk и имею несколько сомнений сам. Я задал вопрос, мог бы ты дать мне свое понимание? http://stackoverflow.com/questions/37370688/pheanstalk-and-beanstalk-functions – Webeng