npm 包 @godaddy/terminus 使用教程

阅读时长 9 分钟读完

最近 @godaddy 推出了一个非常方便的 node.js 应用程序管理库 @godaddy/terminus,它可以让我们非常方便地在 node.js 应用程序中实现优雅的关闭和保持状态检查。

在开发应用程序时,我们经常需要在应用程序停止时进行一些清理工作,比如关闭数据库连接、清理缓存、关闭进程等等。而 @godaddy/terminus 则可以让我们非常方便地处理这些事情,使得我们的应用程序更健壮、更可靠。

废话不多说,接下来就让我们来看看 @godaddy/terminus 的具体使用方法吧。

安装

首先需要安装该 npm 包,可以在命令行中执行以下命令进行安装:

安装成功之后,我们就可以开始使用了。

基本用法

下面我们通过一个简单的例子来演示如何使用 @godaddy/terminus 库来优雅地停止 node.js 应用程序。

我们的例子中有一个简单的 HTTP 服务器,它监听 3000 端口,返回 'Hello World'。为了使得我们的例子能够演示 @godaddy/terminus 库的功能,我们为这个 HTTP 服务器添加了一个信号处理函数,它会在服务器收到 SIGTERM 信号时关闭服务器。

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

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

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

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

在上面的代码中,我们首先创建了一个 HTTP 服务器,并且使用 @godaddy/terminus 库对它进行了注册。注册过程中,我们指定了信号为 SIGTERM,而当收到该信号时,我们会执行一个清理函数 onSignal(),该函数会关闭 HTTP 服务器,并且返回一个 Promise,在 Promise 完成之后,@godaddy/terminus 库会执行 onShutdown() 函数,这个函数会在服务器关闭时执行。

更多用法

除了上面的基本用法之外,@godaddy/terminus 库还提供了很多其他的特性,比如:

状态检查

在上面的例子中,我们只是在关闭 HTTP 服务器时做了清理工作,但是在实际的应用程序中,我们还需要检查一些状态,比如数据库连接是否被关闭,缓存是否被清理等等。

可以使用 @godaddy/terminus 库提供的 healthChecks 参数来进行状态检查。healthChecks 参数接收一个对象,该对象的属性是检查项,属性的值是检查项函数。如果检查项函数返回 Promise.resolve(),则表示该检查项是正常的,否则表示该检查项出现了问题。

下面是一个简单的例子:

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

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

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

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

在上面的例子中,我们添加了两个 healthChecks,一个是 /_health/status,该检查项直接返回 Promise.resolve(),表示该检查项正常;另一个是 /_health/db,该检查项检查数据库连接是否正常,如果正常,就返回 Promise.resolve(),否则返回一个 Promise.reject()。

清理函数的参数

上面的例子中,我们是使用 Promise 实现的清理函数。实际上 @godaddy/terminus 库还支持传递一个带有回调参数的清理函数,如下所示:

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

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

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

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

在这个例子中,我们使用的清理函数接受一个 terminate 参数,该参数是一个回调函数,当清理工作完成后,我们需要调用这个回调函数,以通知 @godaddy/terminus 库清理工作已经完成。

重试

有时候在应用程序关闭时,我们需要做一些必要的转换工作,比如将某些任务转移到其他服务器上。这时候我们可以使用 @godaddy/terminus 库提供的 retry 参数来实现重试。

retry 参数接收一个对象,其属性包括:

  • retries:重试次数,默认值为 3。
  • timeout:超时时间,默认值为 3000(3 秒)。
  • onRetry:每次重试时执行的函数,接收一个重试次数参数。

以下是一个简单的例子:

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

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

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

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

在这个例子中,我们启用了重试功能,重试 5 次,每次的超时时间为 5000 毫秒(即 5 秒),并且每次重试时会调用 onRetry() 函数。

总结

通过上面的例子,我们可以看到 @godaddy/terminus 库提供了非常便利的优雅关闭应用程序的方式,而且还支持状态检查、清理函数带有回调参数、重试等特性。如果你正在开发 node.js 应用程序,我强烈建议你使用 @godaddy/terminus 库来实现优雅的关闭和状态检查。

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