2011-09-14 3 views
0

私は、Beanstalk-client-rubyを使用して、Beanstalkdキュー内のリクエストを処理する複数のワーカーを持っています。TTR期限切れのジョブをキューに戻したワーカーを検出しますか?

テストの目的で、キューからジョブを取得した後、無作為にループしていきます。

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

は、実用的なソリューションを発見自分自身:

  1. 準備私が手にタイムアウトが起こったことを検出することができるように

    が見えますジョブ

  2. job_idで新しいチューブを設定する
  3. 本文のPIDを含むジョブを新しいチューブにプッシュ
  4. タイムアウト> 0のジョブが見つかったら、job_idキューからPIDタスクをポップします。
  5. 労働者を殺す
関連する問題