该文对 NSQ 进行粗略的介绍和部署,旨在入门认识NSQ和个人记录学习;
NSQ说明
NSQ 是实时的分布式消息处理平台, 具有分布式和去中心化拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。
相关组件
个人理解NSQ相比其他消息队列更为简单,相关名词也较少,其核心组件就三个:
以下是几个相关组件说明:
- nsqd : 是消息队列的基础,负责接收,排队,投递消息给客户端。仅部署一个该节点,就可以使用NSQ了,消息的生产者和消费者,均可连接nsqd(后面会再说明)
- nsqlookupd: 客户端(消费者)通过查询 nsqlookupd 来发现指定topic的生产者,简单的说消费者连接该组,可以理解为 nsqd 注册/发现 服务
- nsqadmin: 是消息的管理界面,用于收集汇总的实时统计。
nsqd 是基础,是实际上收发Msg的服务,单跑就能用;nsqlookupd是nsq集群的核心,用于nsqd的节点发现;nsqadmin是可视化管理界面
搭建nsq
nsq的关键词之一就是简单,部署集群也是相当的简单,下面说明在docker环境下,如何快速搭建nsq集群:
- docker pull nsqio/nsq #拉取nsq镜像
- 启动nsqlookupd -- 可部署多个 一般为了可用性,部署 2个即可
docker run -d --name lookupd -p 4160:4160 -p 4161:4161 nsqio/nsq:latest /nsqlookupd
3.启动nsqadmin
docker run -d --name nsqadmin -p 4171:4171 nsqio/nsq /nsqadmin --lookupd-http-address=[刚刚的nsqlookupd地址+端口]
4.启动nsqd -- 可根据实际情况部署多个
docker run -d --name nsqd -p 4150:4150 -p 4151:4151 nsqio/nsq:latest /nsqd --broadcast-address=[广播自身的地址,nsqlookupd能请求到的就行,如都部署在本机.即127.0.0.1] --lookupd-tcp-address=[刚刚的nsqlookupd地址+端口]
在浏览器中输入nsqadmin的地址,即可看到:
点击Streams 可查看topic列表,点击一个,就是常用的界面了:
官网的消息发布流程图
通过Topic和Channel的组合,可以运用于各种场景的数据发布和接收情况;
如服务A B 都为集群服务,均拥有三个节点 均需要订阅名为test的Topic,
A服务需要每个节点,都收到msg,而B服务只需要三个节点的一个收到信息.
此时对A订阅时的channel命名为 A1,A2,A3(或随机值) ,对B服务的订阅时的channel命名均为B.即可实现.
只要channel名不同,就都会收到订阅Topic下的数据,多个channel相同的订阅者,订阅同一Topic,只有随机一个收到(且有一定的负载均衡)
推荐文档.里面有详细的启动参数说明,和各个组件的说明:
- NSQ官方文档:(推荐 基于最新版本v1.2.0)
https://nsq.io/overview/design.html - 极客网对官方文档的中文翻译:(较老,文档说明基于v0.3.5,但很多基础还是相通的)
http://wiki.jikexueyuan.com/project/nsq-guide/