В Beanstalkd, когда задание попадает в TTR, оно убивает работника, обрабатывающего задание, и выпускает задание обратно в пул. В нашей системе это должно быть очень редкое событие, и в этом случае я бы хотел просто похоронить работу.
Как можно это сделать?
(Если это имеет значение, мы используем PHP + Pheanstalk)
Мне кажется, что вы не реализовали протокол должным образом. Вы должны справиться DEADLINE_SOON
, и делать TOUCH
,
Что означает DEADLINE_SOON?
DEADLINE_SOON
является ответом на резервную команду, указывающую, что у вас зарезервировано задание, срок которого действительно скоро (текущий запас прочности составляет приблизительно 1 секунду).
Если вы часто получаете DEADLINE_SOON
Ошибки при резервировании, вам, вероятно, следует подумать об увеличении TTR на ваших работах, поскольку это обычно означает, что вы не выполняете их вовремя. Может также случиться так, что вы не удаляете задачи, когда выполнили их.
Увидеть обсуждение списка рассылки для дополнительной информации.
Как работает TTR?
TTR
относится только к работе в тот момент, когда она становится зарезервированной. В этом случае таймер (называемый «оставшееся время» в статистике работы) начинает отсчет времени от работы. TTR
,
Команда «touch»
Позволяет работнику запрашивать больше времени для работы на работе.
Это полезно для работ, которые могут занять много времени, но вы все еще хотите
преимущества TTR
вытаскивая работу от неотзывчивого работника. Рабочий
может периодически сообщать серверу, что он еще жив и обрабатывает задание
(например, это может сделать это на DEADLINE_SOON
). Команда откладывает авто
выпуск зарезервированной работы до TTR
секунд с момента подачи команды.
Других решений пока нет …