У меня есть 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. Игнорируйте первую строку, поскольку это стандартная трубка, которую я не использую.
После добавления еще одного задания в очередь, общий объем incresses столбцов 4 и больше ничего не изменяется.
Это одна из основных проблем, которые приходится решать при использовании очередей и рабочих - если они терпят неудачу, вы должны их поймать и поступать правильно - игнорирование ошибки и просто повторная попытка редко верны - это просто произойдет fail в следующий раз, а затем вы находитесь в бесконечном цикле. Подробное протоколирование может помочь вам помочь выяснить, что происходит. –
Привет, привет, вопрос и ответ. Я начинаю использовать pheanstalk и имею несколько сомнений сам. Я задал вопрос, мог бы ты дать мне свое понимание? http://stackoverflow.com/questions/37370688/pheanstalk-and-beanstalk-functions – Webeng