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

rag*_*lka 4 worker job-queue node.js kue

在我的webapp中,用户可以创建需要生成并在每个月的某些日期发送的定期发票.例如,可能需要在每个月的5号发送发票.

我正在使用Kue来处理我所有的后台工作,所以我也想在这种情况下这样做.

我目前的解决方案是每小时setInterval()创建一份processRecurringInvoices工作.然后,此作业将从数据库中查找所有定期发票,并generateInvoice为每个定期发票创建单独的作业.

然后,generateInvoice作业将实际生成发票,如果需要,还将创建sendInvoiceToEmail将通过电子邮件发送发票的作业.

目前这个解决方案对我来说很好,因为它有一个很好的关注点,但是,我有以下问题:

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

akn*_*320 5

  1. 可以更容易地将其视为启动其他单独的发票处理作业的工作,而不是"processRecurringInvoices".通过这种方式考虑,一旦发票处理作业被排队,您就可以安全地在完成任务的工作上调用done().
  2. 以问题1中描述的方式思考问题,应该在每个单独的发票处理工作中处理错误.如果发现潜在发票作业时发生错误,那么可能会在processRecurringInvoices作业中处理.
  3. 您可以使用它kue.Job.rangeByType()来搜索当前活动的作业.如果作业处于活动状态,您可以跳过再次将其踢掉.