2017-09-20 3 views
0

私のサーバー上では、時間計算の計算サービスをユーザーに提供します。私はこれらの計算作業をジョブキューに入れました。だから私は、ユーザーを待つジョブ数を表示する必要があります。私はララベルのキューで特定の仕事の前にいくつの仕事を得る方法を見つけることができません。私はキューとしてBeanstalkdを使用しました。laravelキュー内の特定のジョブの前のジョブの数を取得します。

答えて

1

How can I get a list of all jobs in a beanstalk tube?」と同様に、のBeanstalkdは配列ではありません。それは、次の仕事を遂行するためだけに、検索またはカウントされるようには設計されていません。

キューにあるジョブの数とその順序がどこにあるのかを確認するには、別のデータストア(Redisまたはmemcachedなど)の別の場所に書き留めます。ジョブをキューに入れたときにエントリを作成し、ジョブがBeanstalkdから削除されたときにジョブを削除します。注 - この「順序」または「シーケンス」は、すべてのジョブが同じ優先順位を持つ場合にのみ有効で、両方のシステムを完全に同期させておきます。

もっと合理的なやり方としては、キュー(または特定のチューブ/キュー)内のジョブの総数を数えることです。ジョブが、取るべき時間内におおむね似ている場合は、新しい仕事(またはあなたが入れたばかりの仕事)が完了するまでにどれくらいの時間がかかるかの見積もり。

createdAt時間を持つ特別なジョブでETAを計算すると、実行時にキュー(now-createdTime)で取り込まれた時間が外部ストアに更新されます。

関連する問題