NATS 高性能消息系统搭建教程
NATS 是一个开源的高性能消息系统,以其极简的设计、超低的延迟和轻量级的资源占用而著名。NATS 使用纯文本协议,部署和运维都非常简单,特别适合云原生和微服务架构。NATS 支持发布/订阅、请求/响应和队列组等消息模式,而 JetStream 扩展则提供了消息持久化和至少一次投递保证。本文将在搬瓦工 VPS 上搭建 NATS 服务并配置 JetStream。
一、NATS 特点
- 极低延迟:单机百万级消息吞吐,延迟在微秒级。
- 零依赖:单个二进制文件,无需 Java、Erlang 等运行时。
- 超轻量:内存占用仅 10-20MB,非常适合搬瓦工低配 VPS。
- 多协议支持:原生协议、WebSocket、MQTT 兼容。
二、安装 NATS Server
2.1 二进制安装
# 下载最新版本
curl -L https://github.com/nats-io/nats-server/releases/download/v2.10.12/nats-server-v2.10.12-linux-amd64.tar.gz -o nats-server.tar.gz
tar -xzf nats-server.tar.gz
cp nats-server-v2.10.12-linux-amd64/nats-server /usr/local/bin/
nats-server --version
2.2 Docker 安装
docker run -d --name nats -p 4222:4222 -p 8222:8222 -v /data/nats:/data --restart unless-stopped nats:latest -js -sd /data -m 8222
2.3 安装 NATS CLI
curl -L https://github.com/nats-io/natscli/releases/download/v0.1.3/nats-0.1.3-linux-amd64.tar.gz -o nats-cli.tar.gz
tar -xzf nats-cli.tar.gz
cp nats-0.1.3-linux-amd64/nats /usr/local/bin/
三、配置 NATS Server
创建配置文件 /etc/nats/nats-server.conf:
# 客户端监听
listen: 0.0.0.0:4222
# HTTP 监控端口
http_port: 8222
# 认证配置
authorization {
users = [
{ user: "admin", password: "NatsPass123!" }
{ user: "appuser", password: "AppPass123!", permissions: {
publish: ["orders.>", "notifications.>"]
subscribe: ["orders.>", "notifications.>"]
}}
]
}
# JetStream 配置(消息持久化)
jetstream {
store_dir: /data/nats/jetstream
max_mem: 256M
max_file: 1G
}
# 日志配置
log_file: /var/log/nats/nats-server.log
logtime: true
debug: false
mkdir -p /data/nats/jetstream /var/log/nats
nats-server -c /etc/nats/nats-server.conf -D
3.1 创建 systemd 服务
cat > /etc/systemd/system/nats.service << EOF
[Unit]
Description=NATS Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/nats-server -c /etc/nats/nats-server.conf
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable nats
systemctl start nats
四、发布/订阅模式
# 订阅主题
nats sub "orders.>" --user admin --password NatsPass123!
# 在另一个终端发布消息
nats pub orders.created '{"order_id":1001,"amount":99.99}' --user admin --password NatsPass123!
# 请求/响应模式
nats reply orders.query '{"status":"processed"}' --user admin --password NatsPass123!
nats request orders.query '{"order_id":1001}' --user admin --password NatsPass123!
五、JetStream 持久化消息
# 创建 Stream
nats stream add ORDERS --subjects "orders.>" --storage file --retention limits --max-msgs 1000000 --max-bytes 512M --max-age 168h --user admin --password NatsPass123!
# 创建消费者
nats consumer add ORDERS order-processor --deliver all --ack explicit --max-deliver 3 --filter "orders.created" --user admin --password NatsPass123!
# 发布持久化消息
nats pub orders.created '{"order_id":1001}' --user admin --password NatsPass123!
# 消费消息
nats consumer next ORDERS order-processor --count 5 --user admin --password NatsPass123!
# 查看 Stream 信息
nats stream info ORDERS --user admin --password NatsPass123!
六、Python 客户端
import asyncio
import nats
async def main():
nc = await nats.connect("nats://admin:NatsPass123!@localhost:4222")
# 发布/订阅
async def message_handler(msg):
print(f"Received: {msg.data.decode()}")
sub = await nc.subscribe("orders.>", cb=message_handler)
await nc.publish("orders.created", b'{"order_id": 1001}')
await asyncio.sleep(1)
await nc.drain()
asyncio.run(main())
七、NATS 集群配置
# 节点 1 配置
cluster {
name: nats-cluster
listen: 0.0.0.0:6222
routes = [
nats-route://192.168.1.20:6222
nats-route://192.168.1.30:6222
]
}
八、监控
# 查看服务器状态
nats server info --user admin --password NatsPass123!
# 查看连接信息
curl http://localhost:8222/connz
# 查看路由信息
curl http://localhost:8222/routez
# 查看 JetStream 信息
curl http://localhost:8222/jsz
九、与其他消息系统对比
- NATS vs RabbitMQ:NATS 更轻量更快,RabbitMQ 路由功能更丰富。
- NATS vs Kafka:Kafka 适合海量日志流,NATS 适合低延迟实时通信。
- NATS vs Redis Stream:NATS 专为消息设计,功能更完整。Redis Stream 适合已有 Redis 的场景。
总结
NATS 以极简和高性能著称,是搬瓦工 VPS 上部署消息系统的绝佳选择,尤其适合内存有限的低配方案。JetStream 扩展提供了企业级的消息持久化能力。更多消息中间件教程可参考 RabbitMQ 和 Kafka。选购搬瓦工 VPS 请查看 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣,通过 bwh81.net 进入官网。