npm包ows-agenda-2使用教程

阅读时长 10 分钟读完

简介

ows-agenda-2是一个基于Node.js的轻量级调度工具,它可以在指定的时间以及间隔周期性地调用Node.js任务。它可以被应用于计划任务,网站爬虫,和一些与时间相关的业务需求上。ows-agenda-2具有灵活的配置,支持多种不同的数据存储方式。本文将介绍如何使用npm包ows-agenda-2,并提供使用案例。

安装

首先,在你的项目目录下使用npm安装ows-agenda-2:

快速入门

下面的代码片段演示了如何使用ows-agenda-2:

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

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

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

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

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

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

在上面的例子中,我们创建了一个Agenda实例,并在其中定义了一个任务,它将在每3秒中输出一条问候语。在任务执行时,它将从job.attrs.data中读取数据,并用它来定制问候语。在实例化后,我们通过调用every()方法来安排任务。最后,我们在异步函数中等待15秒,然后停止任务调度。

API

Agenda的API主要包含以下几个部分:

Agenda

Agenda是整个调度系统的入口及控制中心。它提供了根据不同用例应该关心的数据存储及存储策略,定义任务,调度任务等的方法。建议一个进程只创建一个Agenda。

Agenda构造函数

我们可以通过以下方式来创建一个Agenda实例:

其中,options是选项对象,可以包含以下属性:

  • db: 用来配置数据存储及存储策略。

  • name: 用来命名和记录不同Agenda实例,非必需。

  • processEvery: 用来配置Agenda在多长时间后检查任务是否应该执行。

  • defaultConcurrency: 用于配置默认的任务并发度。

  • maxConcurrency: 用于配置最大的任务并发度。

  • defaultLockLifetime: 用于配置默认的任务锁定时间。

Agenda#every(interval, name[, data][, options])

every()方法安排将任务间隔在一定时间内运行。参数解释如下:

  • interval: 字符串,指定任务执行的间隔。

  • name: 字符串,指定任务名称。

  • data: 指定了任务需要的数据 意味着你可以通过这种方式在你的任务处理器中读取数据。

  • options: 选项对象。

intervalname是必需的。dataoptions是可选的。interval的格式遵循cron/time的格式.

options选项可以包含以下字段:

  • timezone: 如果没有指定则采用服务器默认时区。

  • deadline: 如果一个任务没有在指定时间内完成,就会超时(默认5000ms).

Agenda#define(name[, options], processor)

define()方法将在Agenda实例上定义一个新任务。参数解释如下:

  • name: 字符串,指定任务名称。

  • options: 选项对象,在这个任务上配置concurrency和其他参数。非必填。如果没有指定,任务将使用默认配置。

  • processor: 函数,接受job和done作为参数。job包含任务本身相关的基本信息,done则是一个回调函数,表示任务完成。

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

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

Job

Job是一个调度中的任务,并包含有关该任务的所有信息。

  • agenda: 此属性是使用此作业的Agenda实例的引用。

  • name: 此属性是指定已定义参数传递给every()、schedule()或now()方法的作业名称。

  • type: 此属性是任务类型。types = ['normal', 'single', 'fixed']

  • data: 此属性是当任务处理程序运行时传递给它的参数。

  • repeatInterval: 属性是与cron语法匹配的字符串,用于定义在处理此任务之间调度任务的频率。

  • repeatTimezone: 属性是时区字符串,用于在处理完任务后调度重复任务。

  • nextRunAt: 属性是下一个运行时间,在第一次调度时赋值。

  • lockedAt: 属性是上锁时间,在加锁后赋值。

  • lastModifiedBy: 属性是jobs上次修改的函数名

Job#repeatAt(time)

repeatAt()可以使用Date对象或类似'HH:MM:ss'的字符串指定时间。改变下一次任务触发的时间点,并使用当前任务设置添加进入延迟队列。

Job#save()

save()方法将改变的Job信息存入数据库。

Job#schedule(time)

schedule()方法安排一个任务在将来的某个时间运行。参数time可以是Date对象或者是字符串。这个方法返回一个promise,处理解决后返回Job实例。

Job#run()

run()方法使作业开始立即运行。在 run() 方法内部调用 job processing 回调( job processor) ,执行完成后调用 done。此方法返回一个Promise,它将在调用回调完成后解决。

Job#remove()

remove()方法从数据库中删除一个任务。

数据存储

默认情况下,Agenda将使用MongoDB作为数据存储,并使用mongo-driver来与MongoDB通信。

示例

下面我们通过一个爬取TopStories的案例来演示ows-agenda-2的使用。

  1. 首先,安装依赖:
  1. 以下是完整的代码:
-- -------------------- ---- -------
-- ----
----- ------ - ------------------------
----- ----- - -----------------
----- ------- - -------------------

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

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

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

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

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

在上面的案例中,我们首先通过axios模块发送一个GET请求来获取Hacker News网站上的Top Stories。使用cheerio模块分析数据,然后输出排名和标题。最后,我们使用agenda.every()方法调度任务,它将在每10秒中运行一次。

结尾

这篇文章中,我们讲解了如何使用npm包ows-agenda-2。作为一个基于Node.js的轻量级调度工具,它可以帮助我们在指定的时间,周期性地调用我们的Node.js任务。我们学习了如何安装、初始化和使用ows-agenda-2的API以及数据存储,以及一个完整的演示案例。我希望这篇文章可以帮助你入门ows-agenda-2并开始使用它。

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

纠错
反馈