使用 Go 编写的高性能 NATS 服务器。NATS 是一个简单而强大的消息传递系统,旨在原生支持现代云架构。由于复杂性无法扩展,NATS 旨在易于使用和实施,同时提供多种服务质量。
NATS 用例
一些适用于 NATS 的用例和要求包括:
- 高吞吐量消息扇出 -- 少数数据生产者(发布者)需要频繁地将数据发送给更大的消费者(订阅者)群体,其中许多人对特定数据集或类别(主题)有共同的兴趣。
- 寻址、发现 -- 将数据发送到特定的应用程序实例、设备或用户,或发现连接到基础结构的所有应用程序实例/设备/用户。
- 命令和控制(控制平面) -- 向运行的应用程序/设备发送命令,并从应用程序/设备接收状态,例如:SCADA、卫星遥测、物联网。
- 负载平衡 -- 您的应用程序会生成大量工作项或请求,并且您希望使用动态可伸缩的工作程序应用程序实例池来确保满足 SLA 或其他性能目标。
- N-way 可扩展性 -- 您希望您的通信基础架构能够充分利用 Go 的高效并发/调度机制,以增强水平和垂直可扩展性,而不受环境影响。
- 位置透明性 -- 您的应用程序需要扩展到地理位置分散的大量实例,并且您无法承担将应用程序与其他应用程序所在位置的详细特定端点配置信息紧密耦合的脆弱性,以及他们正在生产或消费的数据。
- 容错 -- 您的应用程序需要对网络或其他可能无法控制的中断具有高度弹性,并且您需要底层应用程序数据通信才能从连接中断中无缝恢。
使用 NATS Streaming(NATS 的数据流服务),其他用例包括:
- 带有特定时间或序列重播的事件流(或相关偏移量)
- 临时客户端的持久订阅
- 持久/有保证的消息传递
快速启动
如果您只想开始使用 NATS,并且安装了Go 1.5+、并设置了您的 $GOPATH:
安装并运行 NATS 服务器:
go get github.com/nats-io/nats-server nats-server
安装Go NATS 客户端:
go get github.com/nats-io/nats.go/
安装
您可以安装 NATS 服务器二进制文件或 Docker 镜像,连接到 NATS 服务或从源代码构建服务器。
下载
安装NATS服务器的推荐方法是 下载 可用于 OSX、Linux(x86-64/ARM)、Windows 和 Docker的预构建发行二进制文件。有关使用这些二进制文件的说明,请参见 GitHub发布页。
演示
您可以连接到我们演示网站上运行的公共 NATS 服务器: nats://demo.nats.io:4222 或者 tls://demo.nats.io:4443 上的安全版本。请参阅协议部分以了解使用情况。
构建
您可以从 master 分支构建最新版本的服务器。主分支通常应该构建并通过测试,但可能无法在您的环境中正常工作。请注意,操作系统供应商提供的操作系统打包程序的稳定分支可能不够用。
您需要 Go 版本1.5+ 安装来构建 NATS 服务器。我们支持出售的依赖关系,这在Go 1.6中得到完全支持。对于Go 1.5,使用 GO15VENDOREXPERIMENT=1 构建。
- 运行 go version 以验证您正在运行 Go 1.5+。 (运行 go help 获取更多指导。)
- 克隆 https://github.com/nats-io/gnatsd 资源库。
- 在/nats-io/gnatsd 目录内运行 go build 。成功的构建不会产生消息,并在目录中创建服务器可执行文件 gnatsd 。
- 运行 go test ./... 以运行单位回归测试。
运行
要使用默认设置启动NATS服务器(无需身份验证或集群),可以在不使用命令行选项的情况下调用 gnatsd 二进制文件或配置文件。
> ./nats-server [68229] 2018/08/29 11:50:53.789318 [INF] Starting nats-server version 1.3.0 [68229] 2018/08/29 11:50:53.789381 [INF] Git commit [not set] [68229] 2018/08/29 11:50:53.789566 [INF] Listening for client connections on 0.0.0.0:4222 [68229] 2018/08/29 11:50:53.789572 [INF] Server is ready
启动服务器并侦听来自所有可用接口的端口4222上的客户端连接(默认设置)。日志显示为标准输出,如上所示在服务器输出中。
客户端
NATS 生态系统提供了广泛的支持和社区客户端,包括Go,Java,Node,还有很多。有关完整的最新列表,请访问 NATS下载网站。
协议
NATS服务器使用基于文本的协议,因此与它进行交互可以像使用telnet一样简单如下所示。另请参阅协议演示。
> telnet demo.nats.io 4222 Trying 107.170.221.32... Connected to demo.nats.io. Escape character is '^]'. INFO {"server_id":"5o1EFgWr0QYA1giGmaoRLy","version":"1.2.0","proto":1,"go":"go1.10.3","host":"0.0.0.0","port":4222,"max_payload":1048576,"client_id":25474} SUB foo 1 +OK PUB foo 11 Hello World +OK MSG foo 1 11 Hello World
进程信令
在 Unix 系统上,NATS 服务器响应以下信号:
Signal | Result |
---|---|
SIGKILL | Kills the process immediately |
SIGINT | Stops the server gracefully |
SIGUSR1 | Reopens the log file for log rotation |
SIGHUP | Reloads server configuration file |
nats-server 二进制文件可用于使用 -sl 标志将这些信号发送到正在运行的 NATS 服务器:
# Reload server configuration nats-server -sl reload # Reopen log file for log rotation nats-server -sl reopen # Stop the server nats-server -sl stop
如果有多个 nats-server 进程正在运行,或者如果 pgrep 不可用,则必须指定 PID 或 PID 文件的绝对路径:
nats-server -sl stop=<pid> nats-server -sl stop=/path/to/pidfile
请参阅 Windows 服务部分,了解有关在Windows上向 NATS 服务器发送信号的信息。
Windows服务
NATS 服务器支持作为 Windows 服务运行。实际上,这是在 Windows 上运行 NATS 的推荐方式。目前没有安装程序,用户应该使用 sc.exe 安装服务:
sc.exe create nats-server binPath= "%NATS_PATH%\nats-server.exe [nats-server flags]" sc.exe start nats-server
以上将创建并启动一个 gnatsd 服务。请注意,在创建服务时应该传入gnatsd标志。这允许通过使用每个安装的NATS服务器服务的1:1服务实例在单个 Windows 服务器上运行多个NATS服务器配置。服务运行后,可以使用 sc.exe 或 gnatsd.exe -sl 进行控制:
REM Reload server configuration nats-server.exe -sl reload REM Reopen log file for log rotation nats-server.exe -sl reopen REM Stop the server nats-server.exe -sl stop
以上命令将默认控制 gnatsd 服务。如果该服务是另一个名称,则可以指定:
nats-server.exe -sl stop=<service name>