如何在 Ubuntu 16.04 上安装和配置 NATS

介绍

NATS是一个开源的高性能消息传输系统,通常被描述为云的中央神经系统。它能够每秒路由数百万条消息,这使得它非常适合连接微服务和物联网(物联网)设备。

NATS 是一个 _PubSub 消息系统。在这种类型的系统中,一个或多个 publishers 向 _message 经纪人发送具有特定主题的消息,而消息经纪人将这些消息发送给任何客户端,或给定主题的 subscribers 出版商不知道,甚至不关心订阅者,反之亦然。这个架构使系统易于扩展并添加新功能,因为我们可以添加出版商和订阅者而不会影响系统的其他部分。

在本教程中,我们将安装gnatsd,官方的NATS服务器,作为一个服务,并以安全的方式使其可访问,我们还将创建一个基本的服务器过度负荷警报系统,当服务器负荷过高时发送电子邮件,使用gnatsd作为其消息经纪人。

前提条件

要完成本教程,您将需要:

步骤 1 – 下载 NATS 服务器

让我们开始下载gnatsd服务器,并确保它在我们的系统上运行,没有任何问题。

在本教程撰写时,最新的稳定gnatsd版本是版本 0.9.4 您可以检查 NATS 下载页面以获取更晚的版本,并根据需要调整下面的命令,如果你想使用更新的版本。

首先,使用您的非根帐户登录您的服务器:

1ssh sammy@your_server_ip

然后,请确保您在用户的家庭目录中:

1cd

接下来,使用wgetgnatsd下载到您的服务器:

1wget https://github.com/nats-io/gnatsd/releases/download/v0.9.4/gnatsd-v0.9.4-linux-amd64.zip

你刚刚下载的档案是一个压缩的档案,所以你需要安装unzip来提取文件。

1sudo apt-get install -y unzip

然后使用unzip来提取gnatsd:

1unzip -p gnatsd-v0.9.4-linux-amd64.zip gnatsd-v0.9.4-linux-amd64/gnatsd > gnatsd

然后使gnatsd可执行,以便您可以运行它:

1chmod +x gnatsd

让我们测试一下我们可以从当前目录中运行gnatsd,使用以下命令开始gnatsd:

1./gnatsd --addr 127.0.0.1 --port 4222

您看到的输出将类似于这个示例:

1[secondary_label Output]
2[1851] 2016/09/23 05:20:02.247420 [INF] Starting nats-server version 0.9.4
3[1851] 2016/09/23 05:20:02.248182 [INF] Listening for client connections on 127.0.0.1:4222
4[1851] 2016/09/23 05:20:02.248626 [INF] Server is ready

默认情况下,gnatsd在端口4222上听到0.0.0.0地址,这对应于所有接口。 使用--port参数,你可以更改端口,并且通过--addr你可以更改它在端口上听到的地址。 我们用--addr 127.0.0.1运行了gnatsd,所以它只能在我们的服务器中使用,并且无法被外部客户端访问。 在教程中,我们将保护gnatsd并向世界开放。

CTRL+C关闭gnatsd

现在你知道事情工作了,让我们以更正式的方式来安排事情。

步骤 2 — 创建目录结构和配置文件

在第三方Linux上,服务相关的软件经常被保存在/srv目录下,我们会遵循这一惯例,并将NATS相关的文件保存在/srv/nats下,我们会将gnatsd可执行文件放置在/srv/nats/bin

首先,创建 /srv/nats/bin 文件夹:

1sudo mkdir -p /srv/nats/bin

然后将gnatsd移动到/srv/nats/bin文件夹:

1sudo mv ~/gnatsd /srv/nats/bin

服务器可以从一个文件中加载其配置,当我们需要在教程中更改服务器设置时,它将非常有用。

1sudo nano /srv/nats/gnatsd.config

并将以下内容添加到文件中:

1[label /srv/nats/gnatsd.config]
2port: 4222
3net: '127.0.0.1'

此配置文件告诉gnatsd服务器在地址127.0.0.1上的端口4222上倾听,就像以前一样,但这次我们不必在命令行中指定这些选项。

让我们再次运行服务器,以确保我们已经正确配置了东西. 执行以下命令以使用新配置文件启动gnatsd:

1/srv/nats/bin/gnatsd -c /srv/nats/gnatsd.config

结果类似于你以前看到的:

1[secondary_label Output]
2[1869] 2016/06/18 05:30:55.988856 [INF] Starting nats-server version 0.9.4
3[1869] 2016/06/18 05:30:55.989190 [INF] Listening for client connections on 127.0.0.1:4222
4[1869] 2016/06/18 05:30:55.989562 [INF] Server is ready

再次点击CTRL+C关闭gnatsd并返回您的提示.现在让我们创建一个将运行该服务的用户。

步骤三:创建服务用户

运行每个服务以自己的用户帐户是良好的安全实践,以限制如果服务受到破坏的损害。

首先,让我们创建一个名为nats的系统用户和组:

1sudo adduser --system --group --no-create-home --shell /bin/false nats
1[secondary_label Output]
2Adding system user `nats' (UID 106) ...
3Adding new group `nats' (GID 114) ...
4Adding new user `nats' (UID 106) with group `nats' ...
5Not creating home directory `/home/nats'.

我们将/bin/false壳分配给nats系统用户,以禁用该用户的登录,并抑制了家庭目录创建。

让我们将/srv目录的所有者更改为nats用户和组:

1sudo chown -R nats:nats /srv

现在我们已经创建了nats用户和组,让我们继续创建NATS服务。

步骤 4 — 运行 gnatsd 作为服务

我们希望gnatsd在系统启动时启动,如果它崩溃时重新启动,我们将使用 _systemd_来处理此问题。

systemd是Linux系统的服务管理器,负责在启动时启动服务,必要时重新启动服务,并在系统关机时以控制的方式停止服务。

我们需要创建 service configuration 以定义如何和何时启动 NATS 服务. 用户创建的服务文件生活在 /etc/systemd/system 中,因此创建文件 /etc/systemd/system/nats.service:

1sudo nano /etc/systemd/system/nats.service

在文件中,放置此脚本来定义gnatsd应该如何开始:

 1[label  /etc/systemd/system/nats.service]
 2[Unit]
 3Description=NATS messaging server
 4
 5[Service]
 6ExecStart=/srv/nats/bin/gnatsd -c /srv/nats/gnatsd.config
 7User=nats
 8Restart=on-failure
 9
10[Install]
11WantedBy=multi-user.target

*[单位]部分包含有关服务的通用信息,例如描述描述服务。 *[服务]部分包含与服务相关的配置。ExecStart是运行服务器的命令。我们在这里使用可执行的gnatsd绝对路径。Restart=on-failure意味着如果服务出现故障或故障,则必须重新启动服务。如果系统d 阻止了,则不会重新启动。

一旦服务描述到位,我们可以用以下命令开始:

1sudo systemctl start nats

让我们通过发送一个PING消息来确认gnatsd正在运行:

1printf "PING\r\n" | nc 127.0.0.1 4222

我们刚刚使用nc来与gnatsd进行通信。nc是一种命令行工具,用于与TCP或UDP服务器进行通信。

1[secondary_label Output]
2INFO {"server_id":"Os7xI5uGlYFJfLlfo1vHox","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":false,"ssl_required":false,"tls_required":false,"tls_verify":false,"max_payload":1048576}
3PONG

响应PONG让我们知道服务器正在收听并按预期工作,我们需要执行最后一个命令来使我们的NATS服务器启动:

1sudo systemctl enable nats

您将看到以下输出,确认该服务已安装:

1[secondary_label Output]
2Created symlink from /etc/systemd/system/multi-user.target.wants/nats.service to /etc/systemd/system/nats.service.

我们成功配置了gnatsd作为一个服务,现在让我们保护它,让它可以访问外部客户端。

步骤 5 – 确保与 NATS 服务的连接

如果我们希望使用的所有出版商和订阅者在同一台服务器上运行gnatsd,我们可以称之为完成并继续运行,但今天这种情况很少发生。

gnatsd 支持 TLS 传输,因此我们将使用它来确保 gnatsd 和 NATS 客户之间的通信。

首先,我们需要一个证书. 您可以购买一个商业证书,从 Let's Encrypt获取一个证书,或者生成一个自签名的证书。

创建一个目录,暂时保留证书:

1mkdir ~/priv

然后使用以下命令创建自签证书:

1openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
2    -keyout priv/gnatsd.key -out priv/gnatsd.crt \
3    -subj "/C=US/ST=Texas/L=Austin/O=AwesomeThings/CN=www.example.com"

此命令创建了一个 RSA 证书,具有 2048 位和 10 年的有效期. 请注意,我们已经使用任意域名,因为我们不会在本文中启用gnatsd服务器的 TLS 验证。

你现在应该在~/priv目录中有gnatsd.keygnatsd.crt的文件,让我们在我们的/srv/nats/目录结构下移动这些文件,这样一切都在一个地方。

1sudo mv ~/priv /srv/nats

现在,让/srv/nats/priv仅适用于nats用户和组:

1sudo chmod 440 /srv/nats/priv/*
2sudo chmod 550 /srv/nats/priv
3sudo chown -R nats:nats /srv/nats/priv

现在我们更新 /srv/nats/gnatsd.config 以包含我们刚刚创建的证书和密钥。

1sudo nano /srv/nats/gnatsd.config

并添加以下部分,告诉gnatsd使用您的证书和密钥:

1[label /srv/nats/gnatsd.config]
2. . .
3
4tls {
5  cert_file: "/srv/nats/priv/gnatsd.crt"
6  key_file: "/srv/nats/priv/gnatsd.key"
7  timeout: 1
8}

保存文件并离开编辑器,然后重新启动服务,以便它可以收集更改。

1sudo systemctl restart nats

让我们测试我们的证书是否有效。运行此命令:

1printf "PING\r\n" | nc localhost 4222

这一次,命令输出此消息:

1[secondary_label Output]
2INFO {"server_id":"npkIPrCE5Kp8O3v1EfV8dz","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":false,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
3
4-ERR 'Secure Connection - TLS Required'

服务器返回了-ERR``安全连接 - TLS 要求消息,确认新配置已被接收并需要安全连接,而nc不知道如何做。

为了能够在没有安装完整的NATS客户端的情况下与我们的NATS服务进行通信,我们将使用一个名为 catnats 的工具。

1wget https://github.com/yuce/catnats/raw/0.1.2/catnats.py

使之可行:

1chmod +x catnats.py

最后,将catnats.py移动到/srv/nats/bin文件夹,并将其更名为catnats:

1sudo mv catnats.py /srv/nats/bin/catnats

让我们检查我们是否可以使用catnats与我们的NATS服务进行通信,通过发送我们之前发送的相同的PING消息:

1printf "PING\r\n" | /srv/nats/bin/catnats --addr 127.0.0.1:4222

您将看到此输出,表示我们的连接是安全的:

1[secondary_label Output]
2INFO {"server_id":"npkIPrCE5Kp8O3v1EfV8dz","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":false,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
3PONG

现在我们已经确保了通信,让我们启用身份验证,以便需要用户名和密码连接到NATS。

步骤 6 – 要求身份验证

我们的NATS服务不需要默认身份验证,这在服务只能在私人网络上访问时是好的,但我们希望我们的NATS服务能够在互联网上访问,所以我们应该启用身份验证。

打开 /srv/nats/gnatsd.config 文件:

1sudo nano /srv/nats/gnatsd.config

我们将使用user1作为用户名和pass1作为本教程的密码。

1[label /srv/nats/gnatsd.config]
2. . .
3
4authorization {
5  user: user1
6  password: pass1
7}

保存文件,然后将/srv/nats/gnatsd.config的所有者更改为nats,并使该用户能够阅读,以保护用户名和密码免受系统上的其他用户的影响:

1sudo chown nats /srv/nats/gnatsd.config
2sudo chmod 400 /srv/nats/gnatsd.config

然后重新启动服务,以便更改生效:

1sudo systemctl restart nats

让我们将一个PING消息发送到gnatsd来检查一切是否正常. 再次使用catnats发送消息:

1printf "PING\r\n" | /srv/nats/bin/catnats --addr 127.0.0.1:4222

您将看到以下输出:

1[secondary_label Output]
2NFO {"server_id":"sY0SSJBNbEw53HxzS9mH1t","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
3-ERR 'Authorization Violation'

这告诉我们,这些更改已成功应用,我们现在需要发送正确的用户名和密码才能连接到服务. 让我们再试一次,这次提供用户名用户1和密码pass1:

1printf "PING\r\n" | /srv/nats/bin/catnats --addr 127.0.0.1:4222 --user user1 --pass pass1

这次它工作了,正如你可以从以下输出中看到的:

1[secondary_label Output]
2INFO {"server_id":"sY0SSJBNbEw53HxzS9mH1t","version":"0.9.4","go":"go1.6.3","host":"127.0.0.1","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
3+OK
4PONG

现在我们已经将此服务限制在知道用户名和密码的客户端,我们可以重新配置该服务,以便外部客户端可以连接。

第7步:向世界开放服务

我們已設定我們的 NATS 伺服器來聆聽「127.0.0.1」,這是本地接口. 如果我們讓它聆聽「0.0.0.0.0」,那麼它將可供全世界使用。

1sudo nano /srv/nats/gnatsd.config

然后更改与net设置相关的IP地址:

1[label /srv/nats/gnatsd.config]
2. . .
3net: '0.0.0.0'
4. . .

保存文件并重新启动服务:

1sudo systemctl restart nats

现在我们的NATS服务已经为外部客户端连接做好了准备. 要了解如何使用它,让我们创建一个简单的监控服务,使用我们的NATS服务器作为消息经纪人。

步骤 8 — (可选) 配置服务器过载通知

在本节中,您将创建一个简单的过载监控系统,使用您的NATS服务,系统将收到服务器的负载平均值,并在任何服务器过载时向管理员发送电子邮件。

样本项目将由以下组成部分组成:

  • 您刚刚配置的NATS服务.
  • A monitor,它每60秒将服务器的主机名称、负载平均值和处理器数发布给stats.loadaverage主体. 您需要在任何想要监控负载的服务器上运行此组件。
  • A notifier,它会订阅stats.loadaverage主体并接收服务器的主机名称、负载平均值和处理器数。

我们将在同一台服务器上运行所有这些组件,但您可以在完成本教程后尝试在不同的服务器上运行每个组件。

设置监视器

您可以从/proc/loadavg读取Linux系统的平均负载,对于这个项目,我们只对最后一分钟的平均负载感兴趣,这是输出的第一个字段。

1cat /proc/loadavg | cut -f1 -d" "

您将看到以下输出:

1[secondary_label Output]
20.11

您通过读取 /proc/loadavg 获得的负载平均值取决于处理器的数量,因此您必须通过将负载平均值与处理器的数量进行正常化。

1getconf _NPROCESSORS_ONLN

您将看到您的终端中显示的结果:

1[secondary_label Output]
21

由于我们的服务器的默认壳无法处理浮动数字算法,我们将发送负载平均值和处理器的数量,以及主机名称作为我们的消息的负载,并在稍后通知器中进行划分。

1echo $(hostname) `cat /proc/loadavg | cut -f1 -d" "` `getconf _NPROCESSORS_ONLN`

该命令分别显示主机名、负载平均值和处理器数量:

1[secondary_label Output]
2your_hostname 0.28 1

让我们创建一个壳脚本,将主机名称,负载平均值和处理器计数发布给我们的NATS服务器,以主题为stats.loadaverage

1nano ~/publish_load_average.sh

在文件中,添加这个脚本:

1[label ~/publish_load_average.sh]
2NATS_ADDR=127.0.0.1:4222
3LOADAVG=$(cat /proc/loadavg | cut -f1 -d" ")
4NPROC=$(getconf _NPROCESSORS_ONLN)
5SUBJECT="stats.loadaverage"
6PAYLOAD=$(echo $(hostname) $LOADAVG $NPROC)
7MESSAGE="PUB $SUBJECT ${#PAYLOAD}\r\n${PAYLOAD}\r\n"
8printf "$MESSAGE" | /srv/nats/bin/catnats -q --raw --addr $NATS_ADDR --user user1 --pass pass1

此脚本创建了消息,然后将其导向catnats,将消息发布到NATS服务中。我们使用-q交换机运行catnats,以抑制任何输出,我们使用-- raw交换机,以便catnats不试图解释输入内容。

让我们测试脚本是否向NATS发送负载平均值。

下列命令每 5 秒运行 ~/publish_load_average.sh. 请注意,我们在行末尾使用 &` 字符在背景中运行命令:

1while true; do sh ~/publish_load_average.sh; sleep 5; done &

您将看到输出显示该命令正在以进程 ID 在背景中运行:

1[secondary_label Output]
2[1] 14123

<$>[注意] 注意 :把进程ID放到某个地方,因为你需要使用该ID来稍后停止命令。

现在连接到NATS并订阅主题 stats.loadaverage 以获取负载平均值:

1printf "SUB stats.loadaverage 0\r\n" | /srv/nats/bin/catnats --raw --no-exit --pong --user user1 --pass pass1

我们使用--no-exit标志来禁用自动退出,并使用--pong标志来保持我们与NATS的连接。

1[secondary_label Output]
2INFO {"server_id":"A8qJc7mdTy8AWBRhPWACzW","version":"0.8.1","go":"go1.6.2","host":"0.0.0.0","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
3+OK
4+OK
5MSG stats.loadaverage 0 27
6your_hostname 0.08 1

让我们停止称为publish_load_average.sh的循环,因为我们将有一个更好的运行方式,即publish_load_average.sh:

1kill 14123

我们刚刚采取的方法非常适合测试,但它不是我们想要永久使用的东西。我们希望系统运行publish_load_average.sh以运行每分钟。为了实现这一点,我们可以添加一个 crontab 条目。Linux系统使用cron,一个可以运行命令或工作的系统,根据我们指定的时间表。crontab命令使我们能够管理这些工作。您可以在教程中了解有关 Cron 的所有信息。

要创建一个新的条目,执行命令:

1crontab -e

如果您从未运行过上述命令,您可能会看到以下提示,该提示会要求您选择一个文本编辑器来管理条目:

 1[secondary_label Output]
 2no crontab for demo - using an empty one
 3
 4Select an editor. To change later, run 'select-editor'.
 5  1. /bin/ed
 6  2. /bin/nano        <---- easiest
 7  3. /usr/bin/vim.basic
 8  4. /usr/bin/vim.tiny
 9
10Choose 1-4 [2]:

输入与您最舒适的编辑器相匹配的号码,然后按ENTER

在打开的文件末尾,添加以下行,但如果您使用了sammy以外的任何东西,则更换您的用户名:

1*/1 * * * * bash /home/sammy/publish_load_average.sh

上面的条目告诉cron每分钟运行我们的publish_load_average.sh脚本. 保存文件并关闭编辑器。

现在让我们测试负载平均值的定期发布是否有效:

1printf "SUB stats.loadaverage 0\r\n" | /srv/nats/bin/catnats --raw --no-exit --pong --user user1 --pass pass1

等待几分钟,你看到的输出将类似于以下:

1[secondary_label Output]
2INFO {"server_id":"A8qJc7mdTy8AWBRhPWACzW","version":"0.8.1","go":"go1.6.2","host":"0.0.0.0","port":4222,"auth_required":true,"ssl_required":true,"tls_required":true,"tls_verify":false,"max_payload":1048576}
3+OK
4+OK
5MSG stats.loadaverage 0 27
6your_hostname 0.01 1
7MSG stats.loadaverage 0 27
8your_hostname 0.00 1

CTRL+C来退出catnats

我们已经成功设置了监视器,它正在向我们的NATS服务器发送消息,接下来,我们将设置使用这些数据的通知器。

创建通知器

让我们创建一个连接到我们的NATS服务并听取stats.loadaverage消息的通知器。 每当我们的程序收到消息时,它会计算每个处理器的平均负载量。 如果每个处理器的CPU使用率高于0.6或60%,它会为发布消息的主机设置警告旗,并将电子邮件发送到预定义的地址。 如果每个处理器的平均负载量小于0.4,则将清除主机的警告旗。

我们将使用 Node.JS 来创建通知器,因为 Node.js 有一个很好的 NATS 客户端,所以先安装 Node.js:

1sudo apt-get install -y npm

接下来,创建通知器的目录并切换到它:

1mkdir ~/overload_notifier && cd ~/overload_notifier

Node.js 项目使用名为「package.json」的文件,该文件包含有关该项目及其依赖的信息。

1npm init -y

然后安装了 Node.js 的 NATS 客户端,以及我们将在本项目中使用的nodemailer模块来发送警告电子邮件:

1npm install [email protected] [email protected] --save-exact

现在我们可以创建通知器. 创建文件 notifier.js:

1nano notifier.js

然后将以下代码添加到文件中:

1[label notifier.js]
2var NATS_URL = 'nats://127.0.0.1:4222';
3var NATS_USER = 'user1';
4var NATS_PASS = 'pass1';
5var EMAIL_TO = '[email protected]';

请确保您更改这些选项以匹配您的NATS服务的用户名和密码,以及您的电子邮件地址。

接下来,添加此代码来导入 Node.js NATS 客户端并连接到gnatsd服务:

1[label notifier.js]
2var tlsOptions = {
3  rejectUnauthorized: false,
4};
5var nats = require('nats').connect({url: NATS_URL,
6                                    tls: tlsOptions,
7                                    user: NATS_USER,
8                                    pass: NATS_PASS});

然后添加此代码来设置邮件发送器并连接到将发送电子邮件的SMTP服务器。

1[label notifier.js]
2var nodemailer = require('nodemailer');
3var transport = nodemailer.createTransport('smtp://localhost:2525');

然后添加剩余的代码来计算负载平均值,并确定是否需要发送通知电子邮件:

 1[label notifier.js]
 2// keep the state of warnings for each host
 3var warnings = {};
 4
 5function sendEmail(subject, text) {
 6    transport.sendMail({
 7        to: EMAIL_TO,
 8        subject: subject,
 9        text: text
10    });
11}
12
13function processMessage(message) {
14    // message fields: host load processor_count
15    var fields = message.split(" ");
16    var host = fields[0];
17    var loadAverage = parseFloat(fields[1]) / parseInt(fields[2]);
18    if (loadAverage > 0.6) {
19        if (!warnings[host]) {
20            // send warning email if one wasn't already sent
21            var res = sendEmail('Warning! Server is Overloaded: ' + host,
22                                'Load average: ' + loadAverage);
23            // set warning for the host
24            warnings[host] = true;
25        }
26    }
27    else if (loadAverage < 0.4) {
28        if (warnings[host]) {
29            // clear the warning
30            warnings[host] = false;
31        }
32    }
33}
34
35nats.subscribe('stats.loadaverage', processMessage);

我们订阅消息,每当我们收到消息时,我们都会执行processMessage函数,该函数分析我们发送的负载量并确定负载平均值。如果负载量太高,我们会发送消息,并通过设置基于主机名称的旗帜来跟踪我们之前发送的消息。

有了监视器和通知器,是时候测试我们的样本项目了。

测试项目

我们将生成一些人工负载,并检查通知器是否会在负载过高时发送警告电子邮件。

让我们在我们的服务器上安装压力工具来生成CPU负载:

1sudo apt-get install -y stress

接下来,我们需要设置一个SMTP服务器来发送我们的通知器的消息。安装和配置一个完整的SMTP服务器对于这个测试将是过剩,所以我们将使用一个简单的SMTP服务器,该服务器只显示给它发送的电子邮件,而不是实际发送它们。Python编程语言有一个DebuggingServer模块,我们可以加载,它丢弃了它接收的电子邮件,但将它们显示到屏幕上,以便我们可以确保事情工作。

让我们在后台开始调试 SMTP 服务器,我们会让它听到localhost端口2525,这与我们在我们的notifier.js代码中配置的 SMTP 地址相匹配。

1python -m smtpd -n -c DebuggingServer localhost:2525 &

然后用这个命令在背景中启动通知器:

1nodejs ~/overload_notifier/notifier.js &

最后,让我们在我们服务器的所有处理器上生成一些负载,使用以下选项执行压力命令:

1stress --cpu $(getconf _NPROCESSORS_ONLN)

几分钟后,您将看到类似于以下的输出,因为SMTP服务器开始显示通知器发送的消息:

 1[secondary_label Output]
 2---------- MESSAGE FOLLOWS ----------
 3Content-Type: text/plain
 4To: admin@example.com
 5Subject: Warning! Server is Overloaded: your_hostname
 6Message-Id: <1466354822129-04c5d944-0d19670b-780eee12@localhost>
 7X-Mailer: nodemailer (2.4.2; +http://nodemailer.com/;
 8 SMTP/2.5.0[client:2.5.0])
 9Content-Transfer-Encoding: 7bit
10Date: Sun, 19 Jun 2016 16:47:02 +0000
11MIME-Version: 1.0
12X-Peer: 127.0.0.1
13
14Load average: 0.88
15------------ END MESSAGE ------------

这可以让你知道当服务器上的负载过高时,你已经成功发送了电子邮件。

您已经完成了样本项目,现在应该有一个很好的想法,如何在自己的环境中为您工作。

结论

在本文中,您了解了 NATS PubSub 消息系统,以安全的方式将其安装为服务,并在样本项目中测试了它. 该样本项目使用了 Node.JS 客户端,但 NATS 拥有更多语言和框架的客户端,您可以在 NATS 下载页面列出。

Published At
Categories with 技术
comments powered by Disqus