我有一个rails模块,它处理一些活动记录对象,每次只有15-20个,我需要每两分钟开始一次。
我已经尝试将它卸载到sidekiq (和sidekiq-cron),它可以工作,但是使用并发性,创建了许多争用条件和重复数据。
我真的需要一个简单的rails或sinatra的rake任务cron (因为我会创建一个新的sinatra应用程序来完成这些任务)。
谢谢你在正确的方向上的任何一点。
对不起,我说得不清楚。将我的模块推到sidekiq会导致并发问题,但我还没有准备好(我的代码不是threadsafe),加上Heroku在"crons“上设置的限制,那么每2分钟运行一次rake任务的最佳方式是什么?
如果辛纳屈能做到的话,我宁愿这样做,但我不能为同样的问题找到解决办法。
发布于 2018-09-13 01:30:40
还不清楚你在问什么。您已经尝试了选项1,您可以尝试选项2(创建任务并处理它,这很简单),如果它更好的话,您将比任何人都更清楚。
无论如何,如果一项任务花费超过2分钟,我猜这两种方法都会出现并发问题。
您可以添加额外的标志,以防止两个任务处理同一个ServiceEvent (可能添加一个布尔"processing“,并在任务接收时将其设置为true )。
或者,如果另一个任务已经在运行,您也可以有一个锁文件来阻止它运行(在任务启动时创建一个具有特定位置和名称的文件,并在它完成处理时删除该文件,则可以在启动新任务之前检查该文件是否存在)。
https://stackoverflow.com/questions/52304150
复制相似问题