2011-08-30 75 views
11

我試圖使用redis和ruby eventmachine創建無限的作業隊列。使用redis BLPOP命令以0超時實現該Im。成功BLPOP後,我再次運行它。使用BLPOP的redis作業隊列

我在正確的方式還是有更好的方式來創建redis作業隊列?

+0

有幾篇文章/資源對於此方案中,這裏是一個隊列的實現: - [Redis的隊列:新興用例](http://nosql.mypopescu.com/post/426360602/redis-queues-an-emerging-usecase) – yojimbo87

回答

6

如果您單獨使用BLPOP從隊列中刪除消息,並且消息使用者無法處理消息,則消息必須重新排隊,以免消息與消費者失敗一起永久消失。

對於更持久的消息處理,必須保留正在處理的消息列表,以便在發生故障時可以重新排隊。

[B] RPOPLPUSH非常適合這種情況;它可以自動彈出消息隊列中的消息並將其推送到處理隊列中,以便應用程序可以在消費者端出現故障時作出響應。

http://redis.io/commands/rpoplpush

實際重新排隊留給應用程序,但是這Redis的命令提供了基礎,這樣做。

也有一些下降,就地使用Redis的浮動各地的網絡,如RestMQ [http://www.restmq.com/]