我有一个在特定时间结束(到期)的 sql 数据库中的拍卖项目列表,我正在寻找使用 (Delayed::Job.enqueue) 在给定拍卖完成时触发方法的正确方法。
1)在拍卖开始时加载到内存中的每个拍卖使用一个工作器
2) 使用一个在 Web 应用程序启动时加载的工作程序,它会定期查询数据库以查看是否有任何拍卖结束。
有比上面列出的 2 个更好的方法吗?
我有一个在特定时间结束(到期)的 sql 数据库中的拍卖项目列表,我正在寻找使用 (Delayed::Job.enqueue) 在给定拍卖完成时触发方法的正确方法。
1)在拍卖开始时加载到内存中的每个拍卖使用一个工作器
2) 使用一个在 Web 应用程序启动时加载的工作程序,它会定期查询数据库以查看是否有任何拍卖结束。
有比上面列出的 2 个更好的方法吗?
您可以使用run_at
并单独排队每个项目,以便在将其添加到数据库时在其结束时间唤醒。那么你只需要一名工人,直到某事结束,他才会有任何工作要做。(或者,更准确地说,您需要 N 个工作人员,其中 N 是您期望或想要处理的同时关闭的数量。)
auction.delay(:run_at => auction.ending_at).post_end_work
如果您在将拍卖添加到数据库时无法排队(例如,如果它是由无权访问您的东西添加的DelayedJob
),那么您将需要使用单个工作人员ending_at
在最后一次扫描数据库中的值X 时间量,其中 X 是工作人员的运行频率。(以及 . 上的索引ending_at
。)
我强烈建议不要为每次拍卖使用单独的工作人员。