我有一个beanstalkd实例,有两名工人从一个管道中挑选工作。
我注意到,其中一名工人偶尔会预留一份已由另一名工人保留(并正在接受工作)的工作。
我知道队列中没有重复的作业。
为什么beanstalkd允许同一个作业被保留两次?
答案 0 :(得分:2)
听起来你没有正确实施协议。您需要处理DEADLINE_SOON
,并执行TOUCH
。
DEADLINE_SOON是什么意思?
DEADLINE_SOON
是对保留命令的回应,表示您预约了一个截止日期很快的工作(当前安全边际约为1秒)。
如果您经常收到DEADLINE_SOON
个保留错误,您应该考虑增加工作中的TTR,因为它通常表示您没有及时完成。您可能还没有在完成任务后删除任务。
有关详细信息,请参阅mailing list discussion。
TTR如何运作?
TTR
仅适用于作业保留的那一刻。在那个事件中,一个计时器(在工作统计中称为“剩余时间”)从作业的TTR
开始倒计时。
“触摸”命令
允许工作人员请求更多时间处理工作。
这对于可能需要很长时间但仍然需要的作业非常有用
TTR
将工作从无反应的工人中拉出来的好处。一位工人
可以定期告诉服务器它仍处于活动状态并处理作业
(例如,它可以在DEADLINE_SOON
上执行此操作)。该命令推迟了auto
释放保留作业,直到发出命令后TTR
秒为止。
答案 1 :(得分:1)
作业需要比TTR运行更长的时间,因此它被返回队列并被其他工作人员接收。
我现在在工作中设置了更大的TTR。