2011-08-30 6 views
11

redisとrubyイベントマシンを使用して無限ジョブキューを作成しようとしています。これを達成するには、redis BLPOPコマンドを0タイムアウトで使用します。成功したBLPOPの後、私は再びそれを実行します。BLPOPを使用したredisによるジョブキュー

私は正しい方法ですか、またはredisでジョブキューを作成するより良い方法はありますか?

+0

このシナリオに関するいくつかの記事/リソースがあるにもありますが、ここでは1です: - [Redisのキュー:エミュレートUsecase](http://nosql.mypopescu.com/post/426360602/redis-queues-an-emerging-usecase) – yojimbo87

答えて

6

BLPOPを単独で使用してキューからメッセージを削除しても、メッセージコンシューマがそのメッセージを処理できない場合、メッセージはキューに入れ直される必要があります。

より耐久性のあるメッセージ処理を行うには、処理中のメッセージのリストを維持して、障害発生時に再キューに入れる必要があります。

[B] RPOPLPUSHはこのシナリオには最適です。メッセージキューからメッセージをアトミックにポップし、処理キューにプッシュして、アプリケーションが消費者側で障害が発生した場合に応答できるようにします。

http://redis.io/commands/rpoplpush

実際の再キューイングはアプリケーションに委ねますが、このRedisのコマンドは、そうする基盤を提供しています。

いくつかのドロップインプレースなどRestMQなどウェブの周りに浮いのRedisを使用してキューの実装、[http://www.restmq.com/]

関連する問題