最近 @godaddy 推出了一个非常方便的 node.js 应用程序管理库 @godaddy/terminus,它可以让我们非常方便地在 node.js 应用程序中实现优雅的关闭和保持状态检查。
在开发应用程序时,我们经常需要在应用程序停止时进行一些清理工作,比如关闭数据库连接、清理缓存、关闭进程等等。而 @godaddy/terminus 则可以让我们非常方便地处理这些事情,使得我们的应用程序更健壮、更可靠。
废话不多说,接下来就让我们来看看 @godaddy/terminus 的具体使用方法吧。
安装
首先需要安装该 npm 包,可以在命令行中执行以下命令进行安装:
npm install --save @godaddy/terminus
安装成功之后,我们就可以开始使用了。
基本用法
下面我们通过一个简单的例子来演示如何使用 @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