Resque,Delayed_job 或者 Sidekiq 等等。不知道各位怎么推荐呢? 有哪位朋友可以分享一下自己使用的那套的优点?
使用队列,除了把不是必须马上显示的任务放到后台执行外,还有没有什么别的好处呢?
Railscasts: #271 Resque: http://railscasts.com/episodes/271-resque
#366 Sidekiq: http://railscasts.com/episodes/366-sidekiq
Sidekiq
直接感觉省内存。
使用队列,可以衍生出将需要轮询检查的事情或者需要大量计算的任务,变为队列提交任务执行任务的异步处理模型啊,其中计算任务可分解,任务步骤可分解,等等。队列很好使的啦
#1 楼 @tumayun 好,等我用 sidekiq 吧。 #3 楼 @wppurking 我有一个疑问,不怕队列出现这样的情况吗?例如本来需要计算的,可是把东西放进队列了,他去不计算了。 例如我存 a,b,c ,其中 c = a*b。起初打算 a,b,c 需要一同存入,然后当存入 a,b 后,开始把 c 放入队列计算,然后不知道发生什么错误的,队列不计算了,而 c 没存进去,a 和 b 却存了,这样的问题不怕发生吗?
我觉得队列是用来处理非主要任务的时候使用了,比如一个评论添加的时候,程序可能会发消息、会发动态、会打打酱油,这些起始不是什么主要逻辑,而且如果有硬盘或者网络 IO 的话比较浪费时间,扔到队列里,异步干活。我不觉得省了内存。
队列主要是异步执行,提高应用的响应时间。 一般需要连接第三方服务器的 API 调用,邮件发送,统计计算等耗时不可知或平均超过 1 秒的工作,应该放入队列推迟执行。
@linjunpop 我再来一个,Ruby 大多用 redis 做队列,其实 beanstalkd 也不错哈 backburner
@QueXuQ 这个在你逻辑上考虑到了那么就得调整代码逻辑了。队列中的东西,应该要考虑失败重试的问题。