介绍
NATS是一种开源高性能消息系统,通常被称为“云的中枢神经系统”。它能够每秒路由数百万条消息,这使其成为连接微服务和物联网(IoT)设备的理想选择。
NATS是一个PubSub消息传递系统。在这种系统中,一个或多个发布者将具有特定主题的消息发送给消息代理,并且消息代理将这些消息传递给给定主题的任何客户端或订户。出版商不了解甚至不关心订阅者,反之亦然。这种架构可以轻松扩展系统并添加新功能,因为我们可以添加发布者和订阅者,而不会影响系统的其余部分。这种类型的系统非常适合监控服务器和设备; 设备可以发送消息,我们可以订阅这些消息,通过电子邮件或其他方式发送通知。
在本教程中,我们将安装gnatsd
官方NATS服务器作为服务,并以安全的方式访问它。我们还将创建一个基本的服务器过载警告系统,该系统在服务器负载过高时发送电子邮件,并将gnatsd
其用作其消息代理。
要完成本教程,您需要:
sudo
命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)sudo
权限的标准用户帐户。让我们首先下载gnatsd
服务器并确保它在我们的系统上运行没有任何问题。
最新的稳定gnatsd
版本是本教程编写时的0.9.4版本。您可以查看NATS下载页面以获取更高版本,如果您想使用更新版本,可以根据需要调整以下命令。
首先,使用非root帐户登录您的服务器:
ssh sammy@your_server_ip
然后,确保您在用户的主目录中:
cd
接下来,用wget
下载gnatsd
到您的服务器:
wget https://github.com/nats-io/gnatsd/releases/download/v0.9.4/gnatsd-v0.9.4-linux-amd64.zip
您刚刚下载的存档是压缩存档,因此您需要安装unzip
以解压缩文件。你可以用apt
安装它:
sudo apt-get install -y unzip
然后unzip
用来提取gnatsd
:
unzip -p gnatsd-v0.9.4-linux-amd64.zip gnatsd-v0.9.4-linux-amd64/gnatsd > gnatsd
然后创建gnatsd
可执行文件,以便运行它:
chmod +x gnatsd
让我们测试一下,我们可以gnatsd
通过从当前目录运行它来运行它。使用以下命令启动gnatsd
:
./gnatsd --addr 127.0.0.1 --port 4222
您看到的输出与此示例类似:
[1851] 2016/09/23 05:20:02.247420 [INF] Starting nats-server version 0.9.4
[1851] 2016/09/23 05:20:02.248182 [INF] Listening for client connections on 127.0.0.1:4222
[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
。
既然你知道事情有效,那就让我们以更正式的方式进行设置。
在Linux上,第三方服务相关软件经常保存在/srv
目录下。我们将遵循该约定并在/srv/nats
下保留与NATS相关的文件。我们将gnatsd
可执行文件放入/srv/nats/bin
。
首先,创建/srv/nats/bin
文件夹:
sudo mkdir -p /srv/nats/bin
然后移动gnatsd
到/srv/nats/bin
文件夹:
sudo mv ~/gnatsd /srv/nats/bin
服务器可以从文件加载其配置,当我们需要在本教程后面修改服务器设置时,该文件会派上用场。创建文件/srv/nats/gnatsd.config
:
sudo nano /srv/nats/gnatsd.config
并将以下内容添加到该文件:
port: 4222
net: '127.0.0.1'
此配置文件告诉gnatsd
服务器侦听地址127.0.0.1
的端口4222
,就像之前一样,但这次我们不必在命令行上指定这些选项。
让我们再次运行服务器以确保我们已正确配置。执行以下命令以使用新配置文件启动gnatsd
:
/srv/nats/bin/gnatsd -c /srv/nats/gnatsd.config
输出类似于您之前看到的内容:
[1869] 2016/06/18 05:30:55.988856 [INF] Starting nats-server version 0.9.4
[1869] 2016/06/18 05:30:55.989190 [INF] Listening for client connections on 127.0.0.1:4222
[1869] 2016/06/18 05:30:55.989562 [INF] Server is ready
再次按CTRL+C
,关闭gnatsd
并返回到您的提示。现在让我们创建一个将运行此服务的用户。
使用自己的用户帐户运行每项服务以限制服务受损时的损害是一种很好的安全措施。让我们创建一个拥有NATS服务和NATS相关文件的用户和组。
首先,让我们创建一个名为nats
的系统用户和组:
sudo adduser --system --group --no-create-home --shell /bin/false nats
OutputAdding system user `nats' (UID 106) ...
Adding new group `nats' (GID 114) ...
Adding new user `nats' (UID 106) with group `nats' ...
Not creating home directory `/home/nats'.
我们将/bin/false
shell 分配给nats
系统用户以禁用此用户的登录并禁止创建主目录。我们还创建了一个nats
小组。
让我们将/srv
目录的所有者更改为 nats
用户和组:
sudo chown -R nats:nats /srv
现在我们已经创建了nats
用户和组,让我们继续创建NATS服务。
我们想gnatsd
在系统启动时启动,如果崩溃则重新启动。我们将使用systemd来处理这个问题。
systemd是Linux系统的服务管理器。它负责在启动时启动服务,根据需要重新启动它们,并在系统关闭时以受控方式停止它们。
我们需要创建一个 服务配置,以定义应该如何以及何时启动NATS服务。用户创建的服务文件存在/etc/systemd/system
,因此创建文件/etc/systemd/system/nats.service
:
sudo nano /etc/systemd/system/nats.service
在文件中,放置此脚本以定义gnatsd
应如何启动:
[Unit]
Description=NATS messaging server
[Service]
ExecStart=/srv/nats/bin/gnatsd -c /srv/nats/gnatsd.config
User=nats
Restart=on-failure
[Install]
WantedBy=multi-user.target
[Unit]
部分包含有关服务的一般信息,例如Description
描述服务的信息。[Service]
部分包含与服务相关的配置。ExecStart
是运行服务器的命令。我们在gnatsd
这里使用可执行文件的绝对路径。 Restart=on-failure
表示如果服务崩溃或因故障终止,则必须重新启动该服务。如果它被systemd停止,它将不会重新启动。[Install]
部分包含有关服务的安装信息。WantedBy=multi-user.target
告诉systemd在启动时启动服务multi-user.target
。这是在系统引导时启动服务的通用方法。一旦服务描述到位,我们就可以使用以下命令启动它:
sudo systemctl start nats
让我们通过发送PING
消息来确认gnatsd
正在运行:
printf "PING\r\n" | nc 127.0.0.1 4222
我们刚刚用来nc
与之沟通gnatsd
。nc
是一个与TCP或UDP服务器通信的命令行实用程序。我们使用的命令打印类似于以下内容的输出:
INFO {"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}
PONG
响应PONG
让我们知道服务器正在按预期监听和工作。我们需要运行最后一个命令以使我们的NATS服务器在启动时启动:
sudo systemctl enable nats
您将看到以下输出,确认已安装该服务:
OutputCreated symlink from /etc/systemd/system/multi-user.target.wants/nats.service to /etc/systemd/system/nats.service.
我们已成功配置gnatsd
为作为服务运行。现在让我们保护它并使外部客户端可以访问它。
如果我们想要使用的所有发布者和订阅者gnatsd
都在同一台服务器上运行,我们可以将其称为完成并继续前进,但现在这种情况很少发生。我们需要让外部客户端gnatsd
以安全的方式连接和发布消息。
gnatsd
支持TLS传输,因此我们将使用它来保护gnatsd
NATS客户端之间的通信。
首先,我们需要证书。您可以购买商业证书,从Let's Encrypt中检索商业证书或生成自签名证书。我们将使用后一种方法,因为获取证书超出了本文的范围。
创建一个暂时保存证书的目录:
mkdir ~/priv
然后使用以下命令创建自签名证书:
openssl req -x509 -nodes -days 3650 -newkey rsa:2048 \
-keyout priv/gnatsd.key -out priv/gnatsd.crt \
-subj "/C=US/ST=Texas/L=Austin/O=AwesomeThings/CN=www.example.com"
此命令创建一个2048位且有效期为10年的RSA证书。请注意,我们使用了任意域名,因为我们不会在本文中为gnatsd
服务器启用TLS验证。
您现在应该在~/priv
目录中拥有这些文件gnatsd.key
并gnatsd.crt
。让我们将这些文件移到我们的/srv/nats/
目录结构下,这样一切都在一个地方。执行以下命令:
sudo mv ~/priv /srv/nats
现在,只允许nats
用户和组访问/srv/nats/priv
:
sudo chmod 440 /srv/nats/priv/*
sudo chmod 550 /srv/nats/priv
sudo chown -R nats:nats /srv/nats/priv
现在我们更新/srv/nats/gnatsd.config
以包含我们刚刚创建的证书和密钥。再次打开配置文件:
sudo nano /srv/nats/gnatsd.config
并添加以下部分告诉gnatsd
使用您的证书和密钥:
. . .
tls {
cert_file: "/srv/nats/priv/gnatsd.crt"
key_file: "/srv/nats/priv/gnatsd.key"
timeout: 1
}
保存文件并退出编辑器。然后重新启动服务,以便它可以获取更改。
sudo systemctl restart nats
让我们测试我们的证书是否有效。运行此命令:
printf "PING\r\n" | nc localhost 4222
这次,该命令输出以下消息:
INFO {"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}
-ERR 'Secure Connection - TLS Required'
服务器返回消息 -ERR 'Secure Connection - TLS Required'
,确认已接收新配置并且需要安全连接,但nc
不知道如何操作。
为了能够在不安装完整的NATS客户端的情况下与我们的NATS服务进行通信,我们将使用名为catnats的工具。我们先下载它:
wget https://github.com/yuce/catnats/raw/0.1.2/catnats.py
并使其可执行:
chmod +x catnats.py
最后,移动catnats.py
到该/srv/nats/bin
文件夹并将其重命名为catnats
:
sudo mv catnats.py /srv/nats/bin/catnats
让我们catnats
通过发送PING
之前发送的相同消息来检查我们是否可以使用我们的NATS服务进行通信:
printf "PING\r\n" | /srv/nats/bin/catnats --addr 127.0.0.1:4222
你会看到这个输出表明我们的连接是安全的:
INFO {"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}
PONG
现在我们已经保护了通信,让我们启用身份验证,以便连接到NATS需要用户名和密码。
我们的NATS服务默认不需要身份验证。当服务只能在专用网络上访问时,这很好,但我们希望我们的NATS服务可以在因特网上访问,因此我们应该启用身份验证。gnatsd
支持用户名和密码验证,并且易于启用。
打开 /srv/nats/gnatsd.config
文件:
sudo nano /srv/nats/gnatsd.config
添加指定凭据的新authorization
部分。我们将使用本教程的用户名user1
和密码pass1
。您应该在生产环境中使用更长,更复杂的密码:
. . .
authorization {
user: user1
password: pass1
}
保存文件,然后更改/srv/nats/gnatsd.config
to 的所有者nats
并使其可供该用户读取,以保护系统上其他用户的用户名和密码:
sudo chown nats /srv/nats/gnatsd.config
sudo chmod 400 /srv/nats/gnatsd.config
然后重新启动服务以使更改生效:
sudo systemctl restart nats
让我们发一条PING
消息到gnatsd
检查一切是否正常。再一次,用catnats
来发送消息:
printf "PING\r\n" | /srv/nats/bin/catnats --addr 127.0.0.1:4222
您将看到以下输出:
NFO {"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}
-ERR 'Authorization Violation'
这告诉我们已成功应用更改,现在我们需要发送正确的用户名和密码才能连接到服务。我们再试一次,这次提供用户名user1
和密码pass1
:
printf "PING\r\n" | /srv/nats/bin/catnats --addr 127.0.0.1:4222 --user user1 --pass pass1
从下面的输出可以看出,这次它起作用了:
INFO {"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}
+OK
PONG
现在我们已经将此服务限制在知道用户名和密码的客户端,我们可以重新配置服务,以便外部客户端可以连接。
我们已经配置了我们的NATS服务器来监听127.0.0.1
,这是本地接口。如果我们让它听0.0.0.0
,那么世界将可以使用它。我们最后一次更新/srv/nats/gnatsd.config
:
sudo nano /srv/nats/gnatsd.config
然后更改与net
设置关联的IP地址:
. . .
net: '0.0.0.0'
. . .
保存文件并重新启动服务:
sudo systemctl restart nats
现在我们的NATS服务已准备好进行外部客户端连接。为了学习如何使用它,让我们创建一个简单的监视服务,它使用我们的NATS服务器作为消息代理。
在本节中,您将创建一个使用NATS服务的简单过载监视系统。系统将接收服务器的负载平均值,并在任何服务器过载时向管理员发送电子邮件。
示例项目将包含以下组件:
stats.loadaverage
每60秒的主题。您需要在要监视负载的任何服务器上运行此组件。stats.loadaverage
主题,并接收服务器的主机名,平均负载和处理器计数。如果主机的负载平均值高于某个阈值,则通知程序通过SMTP服务器向预定义的地址发送电子邮件。为简单起见,我们将在同一服务器上运行所有这些组件,但您可以在完成本教程后尝试在不同的服务器上运行每个组件。
您可以从中读取Linux系统的平均负载/proc/loadavg
。对于这个项目,我们只对最后一分钟的负载平均值感兴趣,这是输出的第一个字段。使用此命令获取该值:
cat /proc/loadavg | cut -f1 -d" "
您将看到以下输出:
0.11
通过读取/proc/loadavg
获得的平均负载取决于处理器的数量,因此您必须通过将负载平均值除以处理器数量来对其进行标准化。您可以使用以下命令获取服务器的处理器数量:
getconf _NPROCESSORS_ONLN
您将看到终端中显示的结果:
1
由于我们服务器的默认shell无法处理浮点数运算,因此我们将发送加载平均值和处理器数量以及主机名作为消息的有效负载,并在稍后的通知程序中进行除法。这是我们用来构造有效负载的命令:
echo $(hostname) `cat /proc/loadavg | cut -f1 -d" "` `getconf _NPROCESSORS_ONLN`
该命令分别显示主机名,负载平均值和处理器数:
your_hostname 0.28 1
让我们创建一个shell脚本,它用主机名stats.loadaverage
将负载平均值和处理器数发布到我们的NATS服务器上。我们将配置我们的系统以定期运行此脚本。创建一个名为的新文件~/publish_load_average.sh
:
nano ~/publish_load_average.sh
在该文件中,添加以下脚本:
NATS_ADDR=127.0.0.1:4222
LOADAVG=$(cat /proc/loadavg | cut -f1 -d" ")
NPROC=$(getconf _NPROCESSORS_ONLN)
SUBJECT="stats.loadaverage"
PAYLOAD=$(echo $(hostname) $LOADAVG $NPROC)
MESSAGE="PUB $SUBJECT ${#PAYLOAD}\r\n${PAYLOAD}\r\n"
printf "$MESSAGE" | /srv/nats/bin/catnats -q --raw --addr $NATS_ADDR --user user1 --pass pass1
此脚本创建消息,然后将该消息传送到catnats
,该消息将消息发布到NATS服务。我们catnats
使用 -q
开关运行来抑制任何输出,我们使用 --raw
开关,因此catnats
不会尝试解释输入的内容。$NATS_ADDR
如果NATS服务位于不同的服务器上,您可以更改 变量的值。
让我们测试脚本将负载平均值发送到NATS。
以下命令每5秒运行一次~/publish_load_average.sh
。请注意,我们使用&
行尾的字符在后台运行命令:
while true; do sh ~/publish_load_average.sh; sleep 5; done &
您将看到输出显示该命令在后台运行,并带有进程ID:
[1] 14123
注意:在某处记下进程ID,因为您需要使用该ID以便稍后停止该命令。
现在连接到NATS并订阅主题stats.loadaverage
以检索平均负载:
printf "SUB stats.loadaverage 0\r\n" | /srv/nats/bin/catnats --raw --no-exit --pong --user user1 --pass pass1
我们使用该 --no-exit
标志来禁用自动退出,和--pong
使我们与NATS的连接保持活动状态。如果一切正确,您应该得到类似于以下的输出,每5秒更新一次:
INFO {"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}
+OK
+OK
MSG stats.loadaverage 0 27
your_hostname 0.08 1
按CTRL+C
退出catnats
。让我们停止调用的publish_load_average.sh
循环,因为我们将有更好的运行方式来运行publish_load_average.sh
:
kill 14123
我们刚刚采用的方法非常适合测试,但这不是我们想永久使用的方法。我们希望系统能够publish_load_average.sh
每分钟运行一次。为了实现这一点,我们可以添加一个crontab条目。Linux系统使用cron
一个可以按照我们指定的计划运行命令或“作业”的系统。该crontab
命令允许我们管理这些作业。
要创建新条目,请执行以下命令:
crontab -e
如果您从未运行上述命令,您可能会看到以下提示,要求您选择文本编辑器来管理条目:
no crontab for demo - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
输入与您最熟悉的编辑器对应的数字,然后按ENTER
。文件将显示在您选择的编辑器中。
在打开的文件的末尾,添加以下行,但如果您使用了以下内容,请替换您的用户名sammy
:
*/1 * * * * bash /home/sammy/publish_load_average.sh
上面的条目告诉cron
我们每分钟运行一次publish_load_average.sh
脚本。保存文件并关闭编辑器。
现在让我们测试负载平均值的定期发布是否有效:
printf "SUB stats.loadaverage 0\r\n" | /srv/nats/bin/catnats --raw --no-exit --pong --user user1 --pass pass1
等待几分钟,您看到的输出将类似于以下内容:
INFO {"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}
+OK
+OK
MSG stats.loadaverage 0 27
your_hostname 0.01 1
MSG stats.loadaverage 0 27
your_hostname 0.00 1
按CTRL+C
退出catnats
。
我们已经成功设置了监视器,它正在向我们的NATS服务器发送消息。接下来,我们将设置使用此数据的通知程序。
让我们创建连接到我们的NATS服务并监听stats.loadaverage
消息的通知程序。每当我们的程序收到消息时,它会计算每个处理器的平均负载。如果它高于0.6或每个处理器60%的CPU利用率,它会为发布消息的主机设置警告标志,并将电子邮件发送到预定义的地址。如果每个处理器的平均负载小于0.4,则清除主机的警告标志。为防止充斥收件箱,我们会在设置警告标志时发送一封电子邮件。
我们将使用Node.JS来创建通知程序,因为Node.js有一个很棒的NATS客户端。所以,首先安装Node.js:
sudo apt-get install -y npm
接下来,为通知程序创建目录并切换到该目录:
mkdir ~/overload_notifier && cd ~/overload_notifier
Node.js项目使用一个名为package.json
的文件,其中包含有关项目及其依赖项的信息。执行以下命令以创建该文件:
npm init -y
然后为Node.js安装NATS客户端,以及我们将在此项目中使用的nodemailer
模块发送警告电子邮件:
npm install nodemailer@2.4.2 nats@0.6.4 --save-exact
现在我们可以创建通知程序。创建文件notifier.js
:
nano notifier.js
然后将以下代码添加到文件中:
var NATS_URL = 'nats://127.0.0.1:4222';
var NATS_USER = 'user1';
var NATS_PASS = 'pass1';
var EMAIL_TO = 'admin@example.com';
请务必更改这些选项以匹配NATS服务的用户名和密码,以及您的电子邮件地址。
接下来,添加此代码以导入Node.js NATS客户端并连接到gnatsd
服务:
var tlsOptions = {
rejectUnauthorized: false,
};
var nats = require('nats').connect({url: NATS_URL,
tls: tlsOptions,
user: NATS_USER,
pass: NATS_PASS});
然后添加此代码以设置邮件程序并连接到将发送电子邮件的SMTP服务器。我们很快会设置这个服务器:
var nodemailer = require('nodemailer');
var transport = nodemailer.createTransport('smtp://localhost:2525');
然后添加其余代码以计算平均负载并确定是否需要发送通知电子邮件:
// keep the state of warnings for each host
var warnings = {};
function sendEmail(subject, text) {
transport.sendMail({
to: EMAIL_TO,
subject: subject,
text: text
});
}
function processMessage(message) {
// message fields: host load processor_count
var fields = message.split(" ");
var host = fields[0];
var loadAverage = parseFloat(fields[1]) / parseInt(fields[2]);
if (loadAverage > 0.6) {
if (!warnings[host]) {
// send warning email if one wasn't already sent
var res = sendEmail('Warning! Server is Overloaded: ' + host,
'Load average: ' + loadAverage);
// set warning for the host
warnings[host] = true;
}
}
else if (loadAverage < 0.4) {
if (warnings[host]) {
// clear the warning
warnings[host] = false;
}
}
}
nats.subscribe('stats.loadaverage', processMessage);
我们订阅了消息,每次收到消息时我们都会执行该processMessage
函数,该函数解析我们发送的有效负载并确定负载平均值。如果它太高,我们发送消息,并且我们通过根据主机名设置标志来跟踪我们之前是否已发送过消息。这样我们就可以按主机跟踪通知。如果平均负载低于我们的阈值,我们清除该标志。
有了监视器和通知程序,就可以测试我们的示例项目了。
让我们来试试吧。我们将生成一些人工负载并检查通知程序是否会在负载过高时发送警告电子邮件。
让我们安装该stress
工具以在我们的服务器上生成CPU负载:
sudo apt-get install -y stress
接下来,我们需要设置一个SMTP服务器来邮寄来自通知程序的消息。安装和配置完整的SMTP服务器对于此测试来说是过度的,所以我们将使用一个简单的SMTP服务器,它只显示传递给它的电子邮件,而不是实际发送它们。Python编程语言有一个我们可以加载的DebuggingServer
模块,它丢弃它收到的电子邮件,但是将它们显示在屏幕上,这样我们就可以确保工作正常。Python已经安装在我们的Ubuntu服务器上,所以这是一个完美的解决方案。
我们在后台启动调试SMTP服务器。我们将它侦听localhost
端口2525
,它匹配我们在notifier.js
代码中配置的SMTP地址。执行此命令以启动SMTP服务器:
python -m smtpd -n -c DebuggingServer localhost:2525 &
然后使用以下命令在后台启动通知程序:
nodejs ~/overload_notifier/notifier.js &
最后,让我们在服务器的所有处理器上产生一些负载。使用以下选项执行stress
命令:
stress --cpu $(getconf _NPROCESSORS_ONLN)
几分钟后,您将看到类似于以下内容的输出,因为SMTP服务器开始显示通知程序发送的消息:
---------- MESSAGE FOLLOWS ----------
Content-Type: text/plain
To: admin@example.com
Subject: Warning! Server is Overloaded: your_hostname
Message-Id: <1466354822129-04c5d944-0d19670b-780eee12@localhost>
X-Mailer: nodemailer (2.4.2; +http://nodemailer.com/;
SMTP/2.5.0[client:2.5.0])
Content-Transfer-Encoding: 7bit
Date: Sun, 19 Jun 2016 16:47:02 +0000
MIME-Version: 1.0
X-Peer: 127.0.0.1
Load average: 0.88
------------ END MESSAGE ------------
这可以让您知道在服务器负载过高时您已成功发送电子邮件。
按CTRL+C
停止生成负载。您已经完成了示例项目,现在应该知道如何在您自己的环境中为您工作。
在本文中,您了解了NATS PubSub消息传递系统,以安全的方式将其作为服务安装,并在示例项目中对其进行了测试。示例项目使用Node.JS客户端,但NATS具有更多语言和框架的客户端,您可以在NATS下载页面上找到它们 。您可以在其官方文档中了解有关NATS的更多信息。
更多Ubuntu教程请前往腾讯云+社区学习更多知识。
参考文献:《How To Install and Configure NATS on Ubuntu 16.04》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。