白驹过隙,这篇文章距今已有一年以上的历史。技术发展日新月异,文中的观点或代码很可能过时或失效,请自行甄别:)

系列说明

看到国内没有相关的翻译,都是些使用者的一些笔记之类的. 为了能够让更多的开发者使用nsq快速搭建消息队列服务,特有此系列. 此系列皆为翻译官网(http://nsq.io),个人水平有限,如有错误还望指出.

nsq是什么?

按照官网的说明,nsq是一个事实分布式消息队列服务.它具有以下优点:

  1. nsq天生支持分布式和去中心化,而不用担心单点故障,至此故障容忍和可靠消息投递的高可用特点.
  2. snq支持无缝的水平扩展. 其内置的服务发现机制大大简化了节点(nodes)和集群(cluster)的扩缩容. 支持pub-sub以及消息的负债均衡模式,当然,速度也很优异.
  3. 运维友好. nsq很容易配置和部署,并且内置了一套可视化的后台管理工具. 二进制安装包不存在任何运行时依赖,并且官方提供Linux,darwin,freebsd,windows平台下的二进制包,当然,官方docker镜像也是支持的.
  4. 集成容易. 官方提供了基于Golang和Python的库,同时社区也贡献了其他各个语言的客户端库方便接入.

快速开始

以下步骤能让你在本机快速搭建出一套小型的nsq集群,并且能够发布,消费消息以及将消息存储到硬盘中.

  1. 先进入Installing教程页面
  2. 开启一个终端,启动nsqlookupd服务:

    nsqlookupd
  3. 再开启另外一个终端,启动nsqd服务:

    nsqd --lookupd-tcp-address=127.0.0.1:4160
  4. 再开启第三个终端,启动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. 最后,在另外一个终端钟,启动nsq_to_file服务:

    nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161
  7. 发布更多消息到nsqd

    curl -d 'hello world2' 'http://127.0.0.1:4151/pub?topic=test'
    curl -d 'hello world3' 'http://127.0.0.1:4151/pub?topic=test'
  8. 为了验证所有的操作都已经操作成功,在浏览器中打开http://127.0.0.1/4171开查看nsqadmin服务的可视化统计,当然,也可以到/tmp目录查看log文件(test.*.log)

这里有一个关键点是nsq_to_file(客户端)并不是直接被告知test这个topic在在哪里生产的,二是通过nsqlookupd服务定时取回消息,没有任何消息被丢失.