【问题标题】:Change beanstalkd default TTR更改 beanstalkd 默认 TTR
【发布时间】:2014-09-11 15:36:11
【问题描述】:
我使用标准 /etc/default/beanstalkd 作为服务运行 beanstalkd。
有时,当我尝试删除作业时,我的代码会抛出 NOT_FOUND 错误,因为它因超过 TTR 而被释放。我想为插入管中的所有个作业增加 TTR。
有没有办法为 beanstalkd 工作设置默认 TTR? 我猜我可以在 /etc/default/beanstalkd 中的某个地方更改它,但我在beanstalkd 文档。
【问题讨论】:
标签:
service
beanstalkd
beanstalkc
【解决方案1】:
在我看来,您没有正确实施协议。你需要处理DEADLINE_SOON,做TOUCH。
DEADLINE_SOON 是什么意思?
DEADLINE_SOON 是对保留命令的响应,表明您有一个保留的工作,其截止日期很快(当前安全裕度约为 1 秒)。
如果您经常收到 DEADLINE_SOON 保留错误,您可能应该考虑增加您的工作的 TTR,因为这通常表明您没有及时完成它们。也可能是您在完成任务后未能删除它们。
请参阅mailing list discussion 了解更多信息。
TTR 是如何工作的?
TTR 仅适用于保留时的作业。在这种情况下,计时器(在作业统计中称为“剩余时间”)从作业的TTR 开始倒计时。
- 如果计时器达到零,则作业将放回就绪队列中。
- 如果在计时器用完之前作业被埋葬、删除或释放,计时器将不复存在。
- 如果在计时器归零之前触摸了作业,计时器将从 TTR 开始倒计时。
“触摸”命令
允许员工申请更多时间来完成工作。
这对于可能需要很长时间的工作很有用,但您仍然想要
TTR 将工作从反应迟钝的工人手中拉走的好处。一位工人
可能会定期告诉服务器它还活着并且正在处理一个工作
(例如,它可以在 DEADLINE_SOON 上执行此操作)。该命令推迟自动
在发出命令后的TTR 秒之前释放保留的作业。
【解决方案2】:
没有办法在 /etc/default/beanstalkd 或其他地方设置全局默认值,但是设置一个包装函数/类很容易,所有作业都通过该函数/类汇集然后插入队列,如果没有特别设置,它将设置一个 TTR(PUT 命令的参数)。
在 beanstalkc 中,这将覆盖/替换 put 函数。
def put(self, body, priority=DEFAULT_PRIORITY, delay=0, ttr=DEFAULT_TTR):