0

特定の条件が満たされたときに、特定のジョブを 5 分で実行するようにワーカーをスケジュールしたいと考えています。問題は、同じ条件が再び満たされた場合、実行する予定があるかどうかを確認したいということです。そのようなワーカーの実行がスケジュールされている場合は、再度キューに入れたくありませんが、そうでない場合はキューに入れる必要があります。私がやろうとしていることを皆さんが理解してくれることを願っています。それは達成できますか?はいの場合、どのように?

4

2 に答える 2

2

単純な永続ロックを使用または実装したいようです。ジョブをエンキューするコードは、最初にロックの可用性をチェックし、利用可能な場合は取得してエンキューし、そうでない場合はスキップします。エンキューされたジョブは、ロックの解放を担当できます。ロック タイムアウトを追加するなど、失敗を考慮する必要があります。redis -mutex gem は、このアイデアの有用な実装になる可能性があります。

于 2012-09-28T02:56:34.223 に答える
1

ベスト プラクティスは、べき等なジョブを促進します。これは、複数回実行しても安全な方法でそれらを作成する必要があることを意味します。後続の呼び出しは、最初の呼び出しの結果を変更しません。これは、適切なチェックを行い、それに応じて動作するロジックを記述することで実現します。あなたの労働者が何をするかについての説明を提供していないので、私はこれ以上具体的に言うことはできません.

例として、Sidekiq の FAQ へのリンクを次に示します。

このアプローチの利点は、スケジュールされたワーカーと戦うのではなく、スケジュールされたワーカーの便利な抽象化に沿ってプレイしていることです。

于 2012-10-02T04:02:57.823 に答える