node.js – 如何使用Kue处理预定的重复性作业?

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

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

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

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

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

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

解决方法

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

相关文章

这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关...