beanstalkd允许一个作业被保留两次

时间:2014-07-15 11:59:11

标签: beanstalkd

我有一个beanstalkd实例,有两名工人从一个管道中挑选工作。

我注意到,其中一名工人偶尔会预留一份已由另一名工人保留(并正在接受工作)的工作。

我知道队列中没有重复的作业。

为什么beanstalkd允许同一个作业被保留两次?

2 个答案:

答案 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秒为止。

答案 1 :(得分:1)

作业需要比TTR运行更长的时间,因此它被返回队列并被其他工作人员接收。

我现在在工作中设置了更大的TTR。