【发布时间】:2014-08-26 06:52:03
【问题描述】:
请参阅下面的更新问题。
原问题:
在我当前的 Rails 项目中,我需要解析大型 xml/csv 数据文件并将其保存到 mongodb。 现在我使用以下步骤:
- 接收用户上传的文件,将数据存入mongodb
- 使用sidekiq对mongodb中的数据进行异步处理。
- 处理完成后,删除原始数据。
对于localhost中的中小数据,上述步骤运行良好。但是在heroku中,我使用hirefire来动态地上下缩放worker dyno。当工人仍在处理大数据时,hirefire 看到空队列并缩小工人测功机。这会向进程发送终止信号,并使进程处于未完成状态。
我正在寻找一种更好的解析方式,允许解析进程随时被终止(接收终止信号时保存当前状态),并允许进程重新排队。
现在我正在使用 Model.delay.parse_file 并且它不会重新排队。
更新
读完sidekiq wiki,我发现article about job control。任何人都可以解释代码,它是如何工作的,以及它在接收到 SIGTERM 信号并且工作人员重新排队时如何保持其状态?
是否有任何替代方法来处理作业终止、保存当前状态并从最后一个位置继续?
谢谢,
【问题讨论】:
标签: ruby-on-rails mongodb heroku sidekiq idempotent