2

在 Beanstalkd 中,当一个作业命中 TTR 时,它将杀死处理该作业的工作人员并将该作业释放回池中。在我们的系统中,这应该是一个非常罕见的事件,在这种情况下,我宁愿埋葬这份工作。

怎么做呢?

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

4

1 回答 1

2

在我看来,您没有正确实施协议。你需要处理DEADLINE_SOON,并且做TOUCH

DEADLINE_SOON 是什么意思?

DEADLINE_SOON是对保留命令的响应,表明您保留了一个截止日期很快的作业(当前安全裕度约为 1 秒)。

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

有关更多信息,请参阅邮件列表讨论

TTR 是如何工作的?

TTR仅适用于保留时的作业。在这种情况下,计时器(在作业统计中称为“剩余时间”)从作业的TTR.

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

“触摸”命令

允许工作人员请求更多时间从事工作。这对于可能需要很长时间的工作很有用,但您仍然希望TTR从反应迟钝的工人那里获得工作的好处。工作人员可能会定期告诉服务器它还活着并正在处理一项工作(例如,它可能会在 上执行此操作DEADLINE_SOON)。该命令将保留作业的自动释放推迟到TTR发出该命令的几秒钟后。

于 2014-11-04T14:49:53.590 回答