NATS server(原 gnatsd)

用于 NATS 的高性能服务器,即云原生消息系统。(High-Performance server for NATS, the cloud native messaging system.)

Github stars Tracking Chart

使用 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>

Overview

Name With Ownernats-io/nats-server
Primary LanguageGo
Program languageGo (Language Count: 3)
PlatformDocker, Linux, Mac, Windows
License:Apache License 2.0
Release Count111
Last Release Namev2.10.14 (Posted on 2024-04-11 17:07:51)
First Release Namev0.5.1 (Posted on 2014-04-25 12:30:12)
Created At2012-10-29 16:12:24
Pushed At2024-04-15 17:48:22
Last Commit At
Stargazers Count14.7k
Watchers Count385
Fork Count1.3k
Commits Count9.1k
Has Issues Enabled
Issues Count1579
Issue Open Count276
Pull Requests Count3143
Pull Requests Open Count47
Pull Requests Close Count253
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private

NATS is a simple, secure and performant communications system for digital systems, services and devices. NATS is part of the Cloud Native Computing Foundation (CNCF). NATS has over 30 client language implementations, and its server can run on-premise, in the cloud, at the edge, and even on a Raspberry Pi. NATS can secure and simplify design and operation of modern distributed systems.

License FOSSA Status ReportCard Build Release Coverage CII Best Practices

Documentation

Contact

  • Twitter: Follow us on Twitter!
  • Google Groups: Where you can ask questions
  • Slack: Click here to join. You can ask question to our maintainers and to the rich and active community.

Contributing

If you are interested in contributing to NATS, read about our...

Security

Security Audit

A third party security audit was performed by Cure53, you can see the full report here.

Reporting Security Vulnerabilities

If you've found a vulnerability or a potential vulnerability in the NATS server, please let us know at
nats-security.

License

Unless otherwise noted, the NATS source files are distributed
under the Apache Version 2.0 license found in the LICENSE file.

To the top