2015-01-11 10 views
5

キューに追加されたジョブ(Beanstalkd)がLaravel(Laravel 5)で完了しているかどうかを確認してください。データベースに更新レコードをキューに追加するタスク)。私は私のcomposer.jsonに追加した:BeanstalkdキューのジョブがLaravelで完了しているかどうかを確認する方法

"pda/pheanstalk": "3.*" 

私はこの方法をキューにジョブを追加します。私は、ジョブが使用して完了したかどうかを確認するために使用

$jobId = Queue::push('App\Class', $object->toArray(), $this->getQueueName()); 

は次の関数である:

public function find($queueName, $jobId, $recordId) 
{ 
    $phean = Queue::getPheanstalk(); 

    try { 
     $phean->peek($jobId); 
     $data = ['status' => 'waiting']; 
    } catch (ServerException $e) { 
     $message = $e->getMessage(); 

     if ($message == 'NOT_FOUND: Job ' . $jobId . ' does not exist.') { 
      $data = ... // here I get from database data for $recordId 

     } else { 
      $data = ['status' => 'error']; 
     } 
    } 

    return $data; 
} 

質問は - 仕事が完了したかどうかを確認する信頼できる方法ですか?私はここから例外を除いてメッセージを比較します。私は仕事が完了したかどうかを確認する他の方法を見つけていない。

答えて

1

私はまだLaravel 5を使用していませんが、Laaravel 4では失敗した仕事テーブルがあります。完了していないジョブを確認することができます。私は、L5が何かを持っているか、同じプロセスを維持していると仮定しています。それはあなたの問題を解決しませんか?

私の見解では、あなたは視点を反転させているようです。失敗したものを探す代わりに、あなたは何が成功したものかを探しています。

出典:http://laravel.com/docs/4.2/queues#failed-jobs

0

私はまだLaravel 5を使用しないでください。しかし、Laravel 4では、ジョブが終了すると、手動でキューから削除する必要があります。

Deleting A Processed Job: Once you have processed a job, it must be deleted from the queue, which can be done via the delete method on the Job instance

それは単にあなたがこのような方法を使用していない場合は、ジョブの状態が未完成のままであることを意味します。ここでは公式ドキュメントです。あなたのケースでは、キューを取得して、ジョブIDがそこにあるかどうかを確認できます。

+0

あなたは正しいですが、失敗したジョブは失敗したときに失敗します。だから、私が失敗したジョブを調べてもジョブが完了しているかどうかをチェックしたいときは、ジョブがキューにまだ残っているかどうかをチェックする必要があります。 –

+0

ねえ、それはpbeanstalkが実行中のジョブの全リストを取得する方法を提供していないようです。ジョブ関連の情報をデータベースに保存し、削除または失敗したときにステータスをマークすることができます。 – Ray

0

ジョブの終了に基づいてコマンドをトリガする必要がある場合は、ジョブが完了した時点でキューに入れられたコマンドを起動する必要があります。

それ以外の場合、ジョブが完了したかどうかを確認するための「ポーリング」は面倒で非効率的です。

Laravel 5では、Taylorが提供している新しいコマンドツールをイベントとして使用して、ShouldBeQueuedの実装を適用して、コマンドを他のタスクの完了時に実行するようにキューに入れることができます。

関連する問題