2014-10-31 5 views
1

В Beanstalkd, когда задание попадает в TTR, он убьет рабочего, обрабатывающего задание, и отпустит задание обратно в пул. В нашей системе это должно быть очень редкое событие, и в этом случае я хотел бы просто похоронить работу вместо этого.Beanstalkd: Как авто-похоронить работу, которая попадает в TTR?

Как бы это сделать?

(если это имеет значение, мы используем PHP + Pheanstalk)

ответ

1

Это звучит для меня, что вы не реализовали протокол правильно. Вам необходимо обработать DEADLINE_SOON и сделать TOUCH.

Что означает DEADLINE_SOON?

DEADLINE_SOON - ответ на резервную команду, указывающую, что у вас есть зарезервированное задание, срок действия которого в ближайшее время (текущий запас прочности составляет примерно 1 секунду).

Если вы часто принимаете ошибки в резерве , вероятно, вам стоит подумать об увеличении TTR на ваших рабочих местах, так как обычно это означает, что вы не завершаете их вовремя. Также может быть, что вы не удаляете задачи, когда их завершаете.

Для получения дополнительной информации см. mailing list discussion.

Как работает TTR?

TTR относится только к заданию в момент его сохранения. В этом случае таймер (называемый «время-левый» в статистике заданий) начинает отсчет с задания TTR.

  • Если таймер достигает нуля, задание возвращается в готовую очередь.
  • Если задание было захоронено, удалено или выпущено до истечения таймера, таймер перестает существовать.
  • Если задание потрогать "под ред до того, как таймер достигнет нуля, то таймер начинает через обратный отсчет от TTR.

„потрогать“Команда

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

+0

Я сам не реализую протокол, а использую [Pheanstalk] (https://github.com/pda/pheanstalk), популярную структуру PHP для Beanstalkd. К сожалению, это немного облегчает документацию, поэтому я не уверен, как обращаться с DEADLINE_SOON в моем собственном коде. Однако я посмотрю на 'touch()'. Благодаря! – DOOManiac

+0

Реализация протокола означает следовать протоколу. Поэтому вам нужно выяснить, как читать DEADLINE_SOON с Pheanstalk. – Pentium10

+0

Я никогда не мог найти что-либо еще на 'DEADLINE_SOON', но я смог решить свою проблему, назвав' touch() 'соответствующим образом. Благодаря! – DOOManiac