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