Beanstalkd:如何自动埋葬击中TTR的工作?

时间:2014-10-31 21:56:54

标签: php beanstalkd pheanstalk

在Beanstalkd中,当作业到达TTR时,它将终止处理作业的工作者并将作业释放回池中。在我们的系统中,这应该是一个超级罕见的事件,在这种情况下,我只想埋葬这份工作。

如何做到这一点?

(如果重要,我们使用的是PHP + Pheanstalk)

1 个答案:

答案 0 :(得分:2)

听起来你没有正确实施协议。您需要处理DEADLINE_SOON,并执行TOUCH

DEADLINE_SOON是什么意思?

DEADLINE_SOON是对保留命令的回应,表示您预约了一个截止日期很快的工作(当前安全边际约为1秒)。

如果您经常收到DEADLINE_SOON个保留错误,您应该考虑增加工作中的TTR,因为它通常表示您没有及时完成。您可能还没有在完成任务后删除任务。

有关详细信息,请参阅mailing list discussion

TTR如何运作?

TTR仅适用于作业保留的那一刻。在那个事件中,一个计时器(在工作统计中称为“剩余时间”)从作业的TTR开始倒计时。

  • 如果计时器到达零,则作业将被放回就绪队列。
  • 如果在计时器用完之前隐藏,删除或释放作业,则计时器将不复存在。
  • 如果在计时器到达零之前触摸了作业,则计时器从TTR开始向下计数。

“触摸”命令

允许工作人员请求更多时间处理工作。 这对于可能需要很长时间但仍然需要的作业非常有用 TTR将工作从无反应的工人中拉出来的好处。一位工人 可以定期告诉服务器它仍处于活动状态并处理作业 (例如,它可以在DEADLINE_SOON上执行此操作)。该命令推迟了auto 释放保留作业,直到发出命令后TTR秒为止。