1、介绍
nats是一个开源的,云原生的消息系统。核心基于EventMachine开发,原理是基于消息发布订阅机制,每台服务器上的每个模块会根据自己的消息类别向MessageBus发布多个消息主题,而同时也向自己需要交互的模块,按照需要的主题订阅消息。能够达到每秒8-11百万个消息,整个程序很小只有3M Docker image,它不支持持久化消息,如果你离线,你就不能获得消息。使用nats streaming可以做到持久化,缓存等功能。
2、下载
去https://github.com/nats-io下载最新版本的nats-server版本。这里用2.6.2版本
3、运行
解压后直接运行nats-server
就可以了
tar zxf nats-server-v2.6.2-linux-amd64.tar.gz
./nats-server-v2.6.2-linux-amd64/nats-server
4、将nats添加为服务
vim /lib/systemd/system/nats.service
[Unit]
Description=nats-server daemon
After=syslog.target network.target
Wants=network.target
[Service]
ExecStart=/home/nats-server/nats-server -c /home/nats-server/nats.yml
Restart= on-failure
[Install]
WantedBy=multi-user.target
然后就可以通过systemctl
来启动停止了
#开机启动
systemctl enable nats
# 启动
systemctl start nats
# 停止
systemctl stop nats
# 查看状态
systemctl status nats
5、启动参数配置说明
在源码main.go中可以看到配置参数。
服务器选项:
-a, --addr <host> 绑定主机IP地址(默认是0.0.0.0)
-p, --port <port> 客户端连接NATS服务器使用的端口(默认是4222)
-n, --name <server_name> 服务器名字(默认:自动)
-P, --pid <file> 存储PID的文件
-m, --http_port <port> HTTP监听端口
-ms,--https_port <port> HTTPS监听端口
-c, --config <file> 指定配置文件
-t 测试配置文并退出
-sl,--signal <signal>[=<pid>] 向 nats-server 进程发送信号(停止、退出、重新打开、重新加载)
<pid> 可以是 PID(例如 1)或 PID 文件的路径(例如 /var/run/nats-server.pid)
--client_advertise <string> 向其他服务器广播的客户端 URL
日志选项:
-l, --log <file> 指定日志输出的文件
-T, --logtime 是否开启日志的时间戳(默认为true)
-s, --syslog 启用syslog作为日志方法
-r, --remote_syslog <addr> 远程日志服务器的地址(默认为udp://localhost:514)
-D, --debug 开启调试输出
-V, --trace 跟踪原始的协议
-VV 详细跟踪(也跟踪系统帐户)
-DV 调试并跟踪
-DVV 调试和详细跟踪(也跟踪系统帐户)
JetStream 选项:
-js, --jetstream 启用 JetStream 功能。
-sd, --store_dir <dir> 设置存储目录。
授权认证选项:
--user <user> 连接需要的用户名
--pass <password> 连接需要的密码
--auth <token> 连接所需的授权令牌
TLS 安全选项:
--tls 启用TLS,不验证客户端(默认为false)
--tlscert <file> 服务器证书文件
--tlskey <file> 服务器证书私钥
--tlsverify 启用TLS,每一个客户端都要认证
--tlscacert <file> 客户端证书CA用于认证
集群选项:
--routes <rurl-1, rurl-2> 请求和连接的路由
--cluster <cluster-url> 请求路由的集群 URL
--cluster_name <string> Cluster Name,如果不设置会动态生成一个
--no_advertise <bool> 不向客户端通告已知的集群信息
--cluster_advertise <string> 向其他服务器通告的集群 URL
--connect_retries <number> 连接重试次数
常规选项:
-h, --help 显示帮助消息
-v, --version 显示版本信息
--help_tls 显示TLS 帮助消息
6、配置文件
使用参数启动难免太复杂了点,所以可以通过-c加配置文件来启动。
NATS服务器配置文件的格式比较灵活,结合了传统的JSON格式和新的YAML格式的风格。
NATS配置文件格式支持以下语法:
Mixed Arrays: […]
Nested Maps: {…}
Multiple comment types: # and //
Key value assigments using:
Equals sign (foo = 2)
Colon (foo: 2)
Whitespace (foo 2)
Maps can be assigned with no key separator
Semicolons as value terminators in key/value assignments are optional<br>
简单配置
listen: 127.0.0.1:4222
NATS服务器配置文件示例
port: 4242 # 供客户端连接的监听端口
net: apcera.me # 监听的网络地址
http_port: 8222 # HTTP监控端口
# 客户端连接的认证信息
authorization {
user: derek
password: T0pS3cr3t
timeout: 1
}
# 集群定义
cluster {
host: '127.0.0.1' # 主机地址
port: 4244 # 路由连接的入站(inbound)端口
# 路由连接的认证信息
authorization {
user: route_user
password: T0pS3cr3tT00!
timeout: 0.5
}
# Routes are actively solicited and connected to from this server.
# Other servers can connect to us if they supply the correct credentials
# in their routes definitions from above.
routes = [
nats-route://user1:pass1@127.0.0.1:4245
nats-route://user2:pass2@127.0.0.1:4246
]
}
# 日志选项
debug: false
trace: true
logtime: false
log_file: "/tmp/gnatsd.log"
# PID进程文件
pid_file: "/tmp/gnatsd.pid"
# 一些系统属性
# 客户端最大连接数
max_connections: 100
# 最大协议控制行
max_control_line: 512
# 最大的有效负载
max_payload: 65536
# 慢消费者阀值
max_pending_size: 10000000