2016-07-13 16 views
0

http://redis.io/commands/rpoplpushRedisの信頼性の高いキューパターン

(ブロッキングバリアントまたはBRPOPLPUSH)」RPOPLPUSHは、この問題を回避するための方法を提供しています:消費者がメッセージをフェッチし、同時に処理リストにそれをプッシュそれが使用されます。メッセージが処理されると処理リストからメッセージを削除するためのLREMコマンド。

この信頼性の高いキューパターンを推奨します。ここで重要な点は、プロセスが終了しない限り、キューからアイテムを削除することです。しかし、私の最大の混乱は、ここで処理キューが必要な理由です。キューを1つだけ保持することで同じ目標を達成できます。

答えて

1

問題は、キューにアクセスする複数のタスクがある場合に発生します。これは、大文字となる可能性があります。キューに残しておくと、別のタスクでそれを取り出してメッセージを複製する危険性があります。この問題を解決し、信頼性を確保するために、RPOPLPUSHを使用します。これは、メインキューからメッセージを取り出し、それをセカンダリキューにプッシュし、タスクが実行したいことを実行するメッセージをタスクに与えます。これで二次タスクが発生し、重複の心配なしにメインキューにアクセスできます。

最後に、最初のタスクが完了すると、LREMを実行してメッセージを処理キューから削除し、ジョブを完了することができます。このプロセスはどのタスクでも繰り返され、すべてのタスクに対して1つの処理キューを実装するか、タスクごとに別々の処理キューを実装することができます。これはユースケースによって異なります。

関連する問題