如何使用Kue处理预定的重复作业?

在我的Web应用程序中,用户可以创build每月在特定date生成和发送的循环发票。 例如,发票可能需要在每个月的五号发出。

我正在使用Kue来处理所有的背景作业,所以我想在这种情况下也这样做。

我目前的解决scheme是使用setInterval()每小时创build一个processRecurringInvoices作业。 然后,该作业将从数据库中查找所有定期发票,并为每个定期发票创build一个单独的generateInvoice作业。

然后, generateInvoice作业将实际生成发票,如果需要的话,也将创build一个sendInvoiceToEmail作业,通过电子邮件发票。

目前这个解决scheme对我来说看起来不错,因为它有一个很好的问题分离,但是,我有以下问题:

  1. 我不确定是否应该在主processRecurringInvoices作业中调用done()之前等待所有“子”作业完成?
  2. 我应该在哪里处理错误? 我是否应该将它们传递给processRecurringInvoices作业,还是应该为每个作业单独处理?
  3. 如何确保如果处理需要超长时间(超过一个小时),并且processRecurringInvoices或任何子作业仍在运行, processRecurringInvoices作业不会再次创build? 有点像独特的工作,还是相互排斥?

  1. 而不是“processRecurringInvoices”,可能更容易将其视为启动其他单独的发票处理工作的工作。 这样思考,一旦发票处理工作已经排队,你就可以安全地调用done()来完成这个工作。
  2. 按照问题1所述的方式考虑问题,应该在每个发票处理作业中处理错误。 如果发现错误发现潜在的发票作业,那么可能会在processRecurringInvoices作业中处理。
  3. 您可以使用kue.Job.rangeByType()来search当前活动的作业。 如果一个工作是活跃的,你可以跳过它再次开始。
Interesting Posts