nsq

NSQ 是一个实时分布式消息传递平台,旨在大规模运行,每天处理数十亿条消息。

它促进了无单点故障的分布式和分散式拓扑,实现了容错和高可用性以及可靠的消息传递保证。 查看功能和保证。

在操作上,NSQ 易于配置和部署(所有参数都在命令行中指定,编译后的二进制文件没有运行时依赖项)。

为了获得最大的灵活性,它与数据格式无关(消息可以是 JSON、MsgPack、Protocol Buffers 或其他任何形式)。

官方 Go 和 Python 库是开箱即用的(以及许多其他客户端库),如果您有兴趣构建自己的库,可以使用协议规范。

我们发布了 linux、darwin、freebsd 和 windows 的二进制版本以及官方的 Docker 镜像。

注意:master 是我们的开发分支,可能不是一直稳定的。

特性

分散式

NSQ 提倡无单点故障的分布式和分散式拓扑,实现容错和高可用性以及可靠的消息传递保证。

查看功能和保证。

可扩展

NSQ 横向扩展,无需任何中心化代理。

内置发现简化了向集群添加节点的过程。

支持 pub-sub 和负载平衡的消息传递。

它也很快。

操作友好

NSQ 易于配置和部署,并与管理 UI 捆绑在一起。

二进制文件没有运行时依赖项,我们为 linux、darwin、freebsd 和 windows 以及官方 Docker 映像提供预编译版本。

融合的

官方 Go 和 Python 库以及大多数主要语言的许多社区支持库都可用(请参阅客户端库)。

如果您有兴趣构建自己的协议,这里有一个协议规范。

快速开始

安装

安装文档

基于源码编译:

$ git clone https://github.com/nsqio/nsq
$ cd nsq
$ make

Testing

$ ./test.sh

ps: 每次安装都会发现 windows 对于同一的包管理做的很弱。

启动

以下步骤将在您的本地机器上运行一个小型 NSQ 集群,并完成将消息发布、使用和归档到磁盘的过程。

1) 按照安装文档中的说明进行操作。

2) 在一个 shell 中,启动 nsqlookupd:

$ nsqlookupd

3) 在另一个 shell 中,启动 nsqd:

$ nsqd --lookupd-tcp-address=127.0.0.1:4160

4) 在另一个 shell 中,启动 nsqadmin:

$ nsqadmin --lookupd-http-address=127.0.0.1:4161

5) 发布初始消息(也在集群中创建主题):

$ curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'

6) 最后,在另一个 shell 中,启动 nsq_to_file:

$ nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161

7) 向 nsqd 发布更多消息:

$ curl -d 'hello world 2' 'http://127.0.0.1:4151/pub?topic=test'
$ curl -d 'hello world 3' 'http://127.0.0.1:4151/pub?topic=test'

8) 要验证事情是否按预期工作,请在 Web 浏览器中打开 http://127.0.0.1:4171/ 以查看 nsqadmin UI 并查看统计信息。 此外,请检查写入 /tmp 的日志文件 (test.*.log) 的内容。

这里的重要教训是 nsq_to_file(客户端)没有被明确告知测试主题的生成位置,它从 nsqlookupd 中检索此信息,并且尽管连接的时间不同,也不会丢失任何消息。

参考资料

https://github.com/nsqio/nsq

https://nsq.io/