如何使用Kue处理预定的重复作业?
在我的Web应用程序中,用户可以创build每月在特定date生成和发送的循环发票。 例如,发票可能需要在每个月的五号发出。
我正在使用Kue来处理所有的背景作业,所以我想在这种情况下也这样做。
我目前的解决scheme是使用setInterval()
每小时创build一个processRecurringInvoices
作业。 然后,该作业将从数据库中查找所有定期发票,并为每个定期发票创build一个单独的generateInvoice
作业。
然后, generateInvoice
作业将实际生成发票,如果需要的话,也将创build一个sendInvoiceToEmail
作业,通过电子邮件发票。
目前这个解决scheme对我来说看起来不错,因为它有一个很好的问题分离,但是,我有以下问题:
- 我不确定是否应该在主
processRecurringInvoices
作业中调用done()之前等待所有“子”作业完成? - 我应该在哪里处理错误? 我是否应该将它们传递给
processRecurringInvoices
作业,还是应该为每个作业单独处理? - 如何确保如果处理需要超长时间(超过一个小时),并且
processRecurringInvoices
或任何子作业仍在运行,processRecurringInvoices
作业不会再次创build? 有点像独特的工作,还是相互排斥?
- 而不是“processRecurringInvoices”,可能更容易将其视为启动其他单独的发票处理工作的工作。 这样思考,一旦发票处理工作已经排队,你就可以安全地调用done()来完成这个工作。
- 按照问题1所述的方式考虑问题,应该在每个发票处理作业中处理错误。 如果发现错误发现潜在的发票作业,那么可能会在processRecurringInvoices作业中处理。
- 您可以使用
kue.Job.rangeByType()
来search当前活动的作业。 如果一个工作是活跃的,你可以跳过它再次开始。