我有多个工作人员使用 beanstalk-client-ruby 在 beanstalkd 队列中处理请求。
出于测试目的,工作人员在从队列中挑选工作后随机进入无限循环。
Beanstalk 注意到一个作业已被保留太久,并将其返回到队列中以供其他工作人员处理。
我怎么能检测到这种情况已经发生,以便我可以杀死有故障的工人?
看起来我可以检测到发生超时:
> job.timeouts
=> 0
> sleep 10
=> nil
> job.timeouts
=> 1
现在我怎么能这样:
> job=queue.reserve
=> 189
> job.MAGICAL_INFO_STORE[:previous_worker_pid] = $$
=> extraordinary magic happened
> sleep 10
=> nil
> job=queue.reserve
=> 189
> job.timeouts
=> 1
> kill_the_sucker(job.MAGICAL_INFO_STORE[:previous_worker_pid])
=> nil