npm 包 egg-kue 使用教程

阅读时长 9 分钟读完

在前端开发中,如果需要处理后端的异步任务,一般使用消息队列进行解耦。消息队列通常分为两种:基于容器的消息队列和分布式消息队列。基于容器的消息队列如 RabbitMQ、Kafka 等,提供一些可用的容器进行消息的传输、存储和处理。而分布式消息队列如 Redis、RocketMQ、ActiveMQ 等,更关注分布式的消息处理和存储。

在 Node.js 核心模块中,提供了类似于基于容器的消息队列的模块——Cluster 模块,但对于 Node.js 一直致力于解决的分布式问题而言,它并不能满足要求。因此,在 Node.js 社区中,在 Cluster 模块的基础上,诞生了一些分布式的消息队列框架,如「Kue」。而使用框架进行开发,有时过于繁琐,不少开发者遇到了瓶颈。Egg.js 就应运而生,它提供了一套插件式的前端解决方案,其中包含了「Egg-Kue」这个非常优秀的分布式消息队列框架。

在本篇文章中,我们将会详细介绍 npm 包「egg-kue」的使用教程,并为您带来深度的学习和指导意义。

Egg-Kue 简介

Egg-Kue 是一个在 Egg.js 中使用的分布式任务处理系统,它的实现依赖于 Kue。Egg-Kue 使用 Redis 作为消息队列存储后端,redis 提供了丰富的命令来操作消息队列。如果你想要极简的使用 Kue, 且没有更高级的需求,直接使用 Kue 应该是绰绰有余了。

Egg-Kue 的 API 已经被 EGG 封装了,使用起来比 Kue 更加友好和简化,这里我们只需要添加相关配置即可,Egg 对于 Kue 的使用是通过下面的 json 配置来实现的:

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

Egg-Kue 的基本用法

安装

Node.js 仅仅支持单进程模型,对于后端的异步处理和异步任务,Node.js 提供了一些解耦的方案。开发一个小的应用可以自己内部控制,但在大型应用中,你需要把应用拆分成多个相互独立的模块,进行无限扩展和协作。消息队列做的就是这件事情。

首先需要在我们的项目中安装 Egg-Kue:

配置

  1. 控制台命令使用

为了方便进行任务的操作和查看,支持使用 shell 命令查看任务列表、添加任务、删除任务等。你需要配置一下套件的信息。

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

----------- - -
  ---- ----- -- ---- --- -- 
  ------- --- -- --- --------------------- --- ----
  ------- ---- -- -- ----- ------- ---
  ----- --------- -- --- ------- ---------
  ------ -
    --------- --------
    --------- --------
  -
--
  1. XML 配置

在 Egg 框架中,我们可以通过 config/config.default.xml 这个文件来配置,这要求你的应用需要支持 xml 解析,这里在配置 XML 格式文件的基础上提供一个 example.js 转换使用 JSON 格式。具体转化过程请看「example.js」源码,或者参考 Gulpfile.babel.js。使用 XML 配置文件编写:

-- -------------------- ---- -------
----- ------------- ------------------
-----
  ------------
  --------------------
  ---------------------
  -------
    --------------------------
    --------------------------
  --------
------
  1. XSS 配置

在上述配置中,你可能会遇到关于 XSRF 或 XSS 方面的问题,请参考配置方案:

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

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

重点注意:安全措施一般是全局开启配置,所以如果你的应用同时使用了 Egg-Kue 和 Egg,一定要合理地整合使用两个框架的安全组件,请考虑:

  • csrf 配置
  • XSS 配置
  • CSP 配置

基本操作

Egg-Kue 的使用非常简单,我们只需要从 app.kue 中获取 kue 对象,然后对其进行操作即可:

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

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

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

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

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

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

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

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

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

需要注意的是,Kue 任务的运行是基于 redis 的,所以在启动任务前一定要先启动 redis 服务。

Kue API

Egg-Kue 对 Kue 进行了简化,移除了无需使用的方法,同时支持自定义 Kue 对象。

在此做一下简化的 API 列表:

start

启动 Kue 组件。

  • queueOptions: 可选,kue 队列客户端配置信息,详见 Kue 官方文档,默认是 {}
  • popInterval: 可选,kue 消费消息的频率,默认是 5s

create

基于 job 创建一个任务。

  • queue: 必选,队列名称。
  • type: 必选,任务类型。
  • data: 必选,任务数据。
  • backoff: 可选,是否使用指数后退重试。默认是 {type:'exponential', delay: 5*1000}
  • delay: 可选,任务延迟到什么时间开始处理。默认是 0ms
  • priority: 可选,任务优先级和执行顺序,默认为 min
  • removeOnComplete: 可选,任务完成之后是否自动删除。默认为 false

process

开启任务的消费函数。

  • queue: 必选,队列名称。
  • limit: 可选,最大任务数。默认 1
  • callback: 必选,消费函数。

job

根据 Job ID 获取指定任务信息。

  • id: 必选,任务 ID。

jobs

获取任务列表。

  • queue: 必选,队列名称。
  • state: 可选,任务状态。默认为 active

_initQueue

初始化队列客户端。

_getEventemitter

获取子进程任务事件触发器。

  • queue: 可选,队列名称。默认为全局事件。

_workTest

针对队列客户端对测试任务进行处理。

  • queue: 必选,队列名称。
  • obj: 必选,任务信息。

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

纠错
反馈