我有多个worker使用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
答案 0 :(得分:0)
自己找到了一个有效的解决方案: