我有节点js应用程序,用户可以调度4-5个不同的cron作业。用户选择一个start_date、end_date、start_time和end_time,并相应地调度cron函数,并生成一些活动来连接引线(或其他用户)。我正在使用npm包节点调度来实现所需的cron作业执行,但是如果我的web应用程序在两者之间崩溃,问题就会出现。
根据node-schedule的官方文件,
请注意,Node调度是为进程内调度设计的,也就是说,调度作业只有在脚本运行时才会启动,执行完成后计划将消失。
解决方案是使用server.js文件调用cron函数,每次执行服务器脚本时都会重新启动。但我无法解决以下几个问题:
假设,我的调度程序将在5月28日上午11:00至5月31日12:00之间执行调度程序启动它的工作,其中一些活动在两者之间执行。如果我的服务器在5月30日关闭,我如何从剩余的日期和活动中提取,然后从那里完成它?
那么,我关心的是如何安排或处理竞选活动的cron职务?如果在服务器停止的情况下,活动cron作业中有任何一个处于崩溃状态,那么我如何才能重新调度或执行该cron函数的时间或日期?
我对cron的工作经验不多,希望能找到一些方便的解决方案。
发布于 2020-06-02 20:56:31
这里有一些建议,您可以根据硬件功能来检查或实现这些建议:
去耦
将当前应用程序分离到两个分离的工件中: web和campaign。这允许独立地部署、重建、重新部署和管理每个服务。也要有自主或跨职能的团队。
来源:https://skelia.com/articles/5-major-benefits-microservice-architecture/
容错性
如果您需要一个不影响失败、崩溃或任何需要重新启动的事件的应用程序,则必须在应用程序外部使用 that 。
通常,这个在之外是一个数据库。如果数据库不是您的选项,您可以使用json文件。
营销活动
我们这里有两个实体:
campaign_configurations
| identifier | desc | cron_expression | |-------------------|----------------|-----------------| | month_discounts | discounts ... | 0 0 1 * * | | reminder_shop_car | a reminder ... | */10 * * * * | | | | |还可以添加一个列来控制cron的期间有效性,并指定开始日期和结束日期。
campaign_executions
| execution_date | execution_status | execution_log | |---------------------|------------------|---------------| | 10-10-2020 01:00:00 | finished | ... | | 10-10-2020 14:30:00 | error | ... | | 10-10-2020 14:35:00 | executing | ... |
App启动
当您的nodejs活动因故障或计划的维护而启动/重新启动时,这必须是以下流程:
App是健康的
当应用程序正常时,它必须查询campaign_configurations表,以便执行新的或修改过的cron表达式(先前解释过的流程)。
根据您的内部业务逻辑,这可能是每隔30分钟就会发生一次。
您可以使用节点调度完成此任务。
https://stackoverflow.com/questions/62071254
复制相似问题