4

beanstalkd使用标准作为服务运行/etc/default/beanstalkd

有时NOT_FOUND,当我尝试删除作业时,我的代码会抛出错误,因为它由于超出了 TTR 而被释放。我想增加插入管中的所有作业的 TTR。

有没有办法为beanstalkd作业设置默认 TTR?beanstalkd我的猜测是我可以在 /etc/default/beanstalkd 中的某个地方更改它,但我在文档中找不到它。

4

2 回答 2

5

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

DEADLINE_SOON 是什么意思?

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

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

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

TTR 是如何工作的?

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

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

“触摸”命令

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

于 2014-09-12T13:24:10.467 回答
4

没有办法在 /etc/default/beanstalkd 或其他地方设置全局默认值,但很容易设置一个包装函数/类,所有作业都通过汇集然后插入队列,这将如果没有特别设置,则设置 TTR(PUT 命令的参数)。

在 beanstalkc 中,这将覆盖/替换该put函数。

def put(self, body, priority=DEFAULT_PRIORITY, delay=0, ttr=DEFAULT_TTR):
于 2014-09-11T16:29:45.543 回答