CentOS 7下安装nsq

CentOS 7安装nsq

nsq简介

NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息。它具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征

依赖

nsq使用go语言编写,所以我们要安装go的环境。网上有说要去1.4版本以上,还有说要求是1.6版本以上。我就索性安装了1.8的版本。

Go环境安装

go环境中文版下载地址https://golangtc.com/download 可以点击该链接下载您需要的版本。
下载完成后解压并拷贝到你的/usr/local路径下:mv go /usr/local
完成后配置你得环境变量,此时你可以创建一个自己的工作目录当做你的GOPATH并配置到环境变量中,建议将GOPATH/bin同时配置到PATH中,因为我们在后续的安装中会生成很多的可执行文件保存在bin目录下,将其配置到bin中就不会提示你找不到该命令啦。
配置你得环境变量:
vim /etc/profile 在文件的末尾加入如下3行:

export GOROOT=/usr/local/go
export GOPATH=/home/work/gowork  //替换成你自己的GOPATH  
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

注意linux下使用“:”分割,windows下使用“;”分割。
保存退出后执行source /etc/profile使环境变量立即生效。

nsq安装

源码安装

我在安装时参考了其他人写的安装方法,大体有三种方式。
方法1: 按照以下顺序执行go get
go get github.com/tools/godep
go get github.com/bmizerany/assert
godep get github.com/bitly/nsq/…
使用这种方式安装时,执行到第三部会报错。报错“不允许使用内部的包”,最开始以为是自己操作的问题,重装后依然报错。故采用了领一种方法。
方法 2:安装nsq需要安装gpm

yum install gpm
gpm install
go get github.com/nsqio/nsq/...

使用该方式安装成功。
方法3:直接去下载编译好的,解压后复制到你得GOPATH/bin目录下。
https://github.com/nsqio/nsq/releases 直接点击该链接下载对应版本。

nsq测试

1 打开一个终端,启动nsqlookupd:nsqlookupd
2 再打开一个终端,启动nsq:nsqd –lookupd-tcp-address=127.0.0.1:4160
PS:这样开启我遇到了报错“no such host”,在经过多番查找后,发现了如下方式开启。
1. 启动nsqlookupd:nsqlookupd -tcp-address=127.0.0.1:4160 -http-address=127.0.0.1:4161 -broadcast-address=”127.0.0.1”
2. 启动nsqd:nsqd -broadcast-address=”127.0.0.1” -http-address=”127.0.0.1:4151” –lookupd-tcp-address=127.0.0.1:4160 -tcp-address=”127.0.0.1:4150”
3. 再打开一个终端,启动nsqadmin: nsqadmin –lookupd-http-address=127.0.0.1:4161
4. 创建一个topic并且发布一条消息,由于nsq支持http协议发布消息,我们可以直接使用curl命令。
curl -d ‘hello world 1’ ‘http://127.0.0.1:4151/put?topic=test
5. 再开一个终端来处理消息数据流,将消息写入/tmp文件加下的日志文件,文件名默认由主题topic+主机+日期时间戳组成。
nsq_to_file –topic=test –output-dir=/home/work/nsq_log –lookupd-http-address=127.0.0.1:4161
注:/home/work/nsq_log这个为你自己创建的路径。
可以继续执行第4条命令,发布消息。可以进入您创建的路径下面查看日志,也可以登录网页查看。在浏览器中输入http://127.0.0.1:4171/即可查看。
这里写图片描述
至此nsq的安装完成,推荐使用第三种方式安装。

nsq特性

  1. 支持无 SPOF 的分布式拓扑
  2. 水平扩展(没有中间件,无缝地添加更多的节点到集群)
  3. 低延迟消息传递 (性能)
  4. 结合负载均衡和多播消息路由风格
  5. 擅长面向流媒体(高通量)和工作(低吞吐量)工作负载
  6. 主要是内存中(除了高水位线消息透明地保存在磁盘上)
  7. 运行时发现消费者找到生产者服务(nsqlookupd)
  8. 传输层安全性 (TLS)
  9. 数据格式不可知
  10. 一些依赖项(容易部署)和健全的,有界,默认配置
  11. 任何语言都有简单 TCP 协议支持客户端库
  12. HTTP 接口统计、管理行为和生产者(不需要客户端库发布)
  13. 为实时检测集成了 statsd
  14. 健壮的集群管理界面 (nsqadmin)

nsq组件

nsqd

nsqd 是一个守护进程,负责接收,排队,投递消息给客户端。也就是说这个服务是干活的。它可以独立运行,不过通常它是由 nsqlookupd 实例所在集群配置的。
nsqd特性如下:
1. 对订阅了同一个topic,同一个channel的消费者使用负载均衡策略(不是轮询)
2. 只要channel存在,即使没有该channel的消费者,也会将生产者的message缓存到队列中(注意消息的过期处理)
3. 保证队列中的message至少会被消费一次,即使nsqd退出,也会将队列中的消息暂存磁盘上(结束进程等意外情况除外)
4. 限定内存占用,能够配置nsqd中每个channel队列在内存中缓存的message数量,一旦超出,message将被缓存到磁盘中
5. topic,channel一旦建立,将会一直存在,要及时在管理台或者用代码清除无效的topic和channel,避免资源的浪费

nsqlookupd

nsqlookupd 是守护进程负责管理拓扑信息。客户端通过查询 nsqlookupd 来发现指定话题(topic)的生产者,并且 nsqd 节点广播话题(topic)和通道(channel)信息。也就是说nsqlookupd是管理者。
nsqlookupd 特性:
1. 唯一性,在一个Nsq服务中只有一个nsqlookupd服务。当然也可以在集群中部署多个nsqlookupd,但它们之间是没有关联的.
2. 去中心化,即使nsqlookupd崩溃,也会不影响正在运行的nsqd服务
3. 充当nsqd和naqadmin信息交互的中间件
4. 提供一个http查询服务,给客户端定时更新nsqd的地址目录

nsqadmin

nsqadmin是web管理界面,用来汇集集群的实时统计,并执行不同的管理任务。也就是说nsqadmin就是我们在浏览器中看到的那个。
nsqadmin特性如下:
1. 提供一个对topic和channel统一管理的操作界面以及各种实时监控数据的展示,界面设计的很简洁,操作也很简单
2. 展示所有message的数量
3. 能够在后台创建topic和channel
4. nsqadmin的所有功能都必须依赖于nsqlookupd,nsqadmin只是向nsqlookupd传递用户操作并展示来自nsqlookupd的数据

参考文章:http://wiki.jikexueyuan.com/project/nsq-guide/design.html
http://blog.csdn.net/symlljg/article/details/52885565
https://segmentfault.com/a/1190000009194607

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页