npm 包 @sirena/agenda 使用教程

阅读时长 7 分钟读完

简介

@sirena/agenda 是一个基于 Node.js 的任务调度库,可以用于实现计划任务、定时任务等常见的任务调度需求。它支持多种存储方式,包括 MongoDB、Redis 等。使用 @sirena/agenda 可以帮助前端开发人员快速地实现任务调度功能,提高开发效率。

安装

使用 npm 安装 @sirena/agenda

在代码中引入 @sirena/agenda

快速开始

创建 Agenda 实例

创建 Agenda 实例之前需要先连接用于存储任务信息的数据库。以 MongoDB 为例,可以使用 mongoose 库进行连接:

-- -------------------- ---- -------
----- -------- - --------------------

---------------------------------------------- - ---------------- ---- ---

----- -- - --------------------

-------------- --------------------------- -------- ---------
--------------- -- -- -
  -------------------- --------
---

连接成功之后,可以创建 Agenda 实例,一个 Agenda 实例对应一个任务调度实例:

定义任务

使用 agenda.define 方法定义一个任务:

上述代码定义了一个名为 send email 的任务,任务执行时会输出一句日志,并调用传入的 done 回调函数。job 参数表示任务本身,可以通过 job.attrs.data 访问传递给任务的数据。例如,可以使用以下代码添加一个 send email 任务:

此处使用 schedule 方法指定任务执行时间。上述代码表示在明天中午时刻执行任务,任务执行时传入的数据为 { to: 'foo@example.com' }

启动 Agenda

创建 Agenda 实例并定义任务之后,需要调用 agenda.start 方法启动任务调度:

这样就可以开始执行定时任务了。

持久化任务

默认情况下,@sirena/agenda 并不会将任务信息持久化到数据库。如果需要在任务调度服务重启之后恢复已经定义的任务,可以启用持久化功能。

Agenda 实例的 processEvery 属性设置为 5 秒,则 @sirena/agenda 会每 5 秒将任务信息同步到数据库:

在任务执行时更新任务状态

@sirena/agenda 会为任务定义一个名为 status 的属性,用于表示任务的状态。默认情况下,任务的状态为 'created',表示任务已经被创建但尚未被调度执行。任务执行时需要显式将任务状态更新为 'running',任务执行完成后再将任务状态更新为 'complete''failed'

如果任务执行出错,则应将任务状态更新为 'failed'

-- -------------------- ---- -------
------------------- ------- ----- ----- -- -
  ---------------- - ----------  -- -------- ---------
  -------------------- ----- -- --------------------------
  --- -
    ----- --- ------------- -- ---- ---------
  - ----- ----- -
    --------------  -- -------- --------
    ----------
  -
---

监听任务状态变化事件

@sirena/agenda 提供了 Agenda#on 方法用于监听任务状态变化事件。例如,可以在任务失败时发送一封邮件通知管理员:

上述代码中,fail:send email 为事件类型,表示 "send email" 任务执行失败时触发该事件。在事件响应函数中,可以通过 job.attrs 访问任务信息。

使用 Agenda 的高级功能

@sirena/agenda 还提供了一些高级功能,例如重复任务、延迟执行任务、查询任务列表等。以下是一些使用示例:

重复任务

可以使用 Agenda#every 方法定义一个定时执行的任务。以下代码定义一个每分钟执行一次的任务:

此处的 'log time' 为任务名,任务定义与之前的示例相同。

延迟执行任务

可以使用 Agenda#schedule 方法延迟执行一个任务。以下代码定义一个延迟 5 秒执行的任务:

查询任务列表

可以使用 Agenda#jobs 方法查询任务列表。以下代码查询数据库中所有状态为 'complete' 的任务:

上述代码中,第一个参数为查询条件,第二个参数为查询结果的回调函数。

总结

@sirena/agenda 是一个功能强大的任务调度库,可以帮助开发人员快速实现任务调度和计划任务的功能。本文介绍了 @sirena/agenda 的基本用法,包括创建 Agenda 实例、定义任务、启动任务调度服务、任务持久化等。同时,本文还介绍了 @sirena/agenda 的一些高级功能,例如重复任务、延迟执行任务、查询任务列表等。希望本文能对前端开发人员在使用 @sirena/agenda 时提供一些参考和指导。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005547581e8991b448d1bca

纠错
反馈