在我的 webapp 中,用户可以创建需要在每个月的特定日期生成和发送的定期发票。例如,可能需要在每月 5 日发送发票。
我正在使用 Kue 来处理我所有的后台作业,所以我也想在这种情况下这样做。
我目前的解决方案是使用每小时setInterval()
创建一个工作。processRecurringInvoices
然后,此作业将从数据库中查找所有定期发票,并generateInvoice
为每个定期发票创建一个单独的作业。
然后,该generateInvoice
作业将实际生成发票,如果需要,还将创建一个sendInvoiceToEmail
通过电子邮件发送发票的作业。
目前这个解决方案对我来说看起来不错,因为它很好地分离了关注点,但是,我有以下问题:
- 我不确定是否应该等待所有“子”作业完成,然后再调用主要
processRecurringInvoices
作业的 done()? - 我应该在哪里处理错误?我应该将它们交还给
processRecurringInvoices
工作还是应该为每项工作单独处理它们? - 我如何确保如果处理需要很长时间(超过一个小时),并且其中一个
processRecurringInvoices
或任何一个子作业仍在运行,processRecurringInvoices
则不会再次创建该作业?有点像一份独特的工作,还是相互排斥?