我试图使用redis和ruby eventmachine创建无限的作业队列。为了实现这个我使用redis BLPOP命令0超时。成功的BLPOP之后我再次运行它。
我是以正确的方式还是有更好的方法来使用redis创建作业队列?
答案 0 :(得分:6)
如果您单独使用BLPOP从队列中删除邮件,并且您的邮件消费者无法处理它,则必须重新排队该邮件,以免它与失败的使用者一起永久消失。
对于更持久的消息处理,必须维护正在处理的消息列表,以便在发生故障时可以重新排队。
[B] RPOPLPUSH非常适合这种情况;它可以从消息队列中自动弹出消息并将其推送到处理队列,以便应用程序可以在消费者端发生故障时进行响应。
http://redis.io/commands/rpoplpush
实际的重新排队留给应用程序,但是这个redis命令提供了这样做的基础。
还有一些使用redis漂浮在网络上的队列的现场实施,例如RestMQ [http://www.restmq.com/]