请参阅下面的更新问题。
原始问题:
在我当前的 Rails 项目中,我需要解析大型 xml/csv 数据文件并将其保存到 mongodb。现在我使用以下步骤:
- 接收用户上传的文件,将数据存入mongodb
- 使用 sidekiq 对 mongodb 中的数据进行异步处理。
- 处理完成后,删除原始数据。
对于localhost中的中小数据,上述步骤运行良好。但是在heroku中,我使用hirefire来动态地上下缩放worker dyno。当工人仍在处理大数据时,hirefire 会看到空队列并缩小工人 dyno。这会向进程发送终止信号,并使进程处于未完成状态。
我正在寻找一种更好的解析方法,允许解析过程随时被终止(在接收到终止信号时保存当前状态),并允许进程重新排队。
现在我正在使用 Model.delay.parse_file 并且它不会重新排队。
更新
在阅读了 sidekiq wiki 之后,我找到了关于作业控制的文章。谁能解释代码,它是如何工作的,以及在接收到 SIGTERM 信号并且工作人员重新排队时如何保持其状态?
有没有其他方法可以处理工作终止、保存当前状态并从最后一个位置继续?
谢谢,