go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
nsqlookupd:
官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html
用官方话来讲是:nsqlookupd管理拓扑信息,客户端根据特定的topic查询nsqlookupd来发现nsqd生产者及nsqd广播topic和channel信息。比较难懂,所以接下来,用通俗的话来解释。
首先讲点别的东西,用过linux的同学可能会发现,linux下很多应用,比如apache、mysql、ftp等它们的服务名称都是在d结尾的。如:
apache -> httpd
mysql -> mysqld
vsftp -> vsftpd
最后的结尾d是Daemon的意思,守护进程,这种进程不会因为终端窗口关闭就停止执行。比如apache,执行 service httpd start后,apache就启动了, 终端关掉后,apache仍然在后台运行。
好了,现在你会发现,我们的nsqlookupd和nsqd也是在d结尾的,这就暗示他们可能是守护进程,而事实上也确实是这样。
nsqlookupd就是类似apache一样的一个后台服务,它可以理解为整个nsq系统的神经中枢,启动以后,它默认会同时监听两个端口,在4160端口,建立一个tcp server,用于和nsqd进行数据沟通。在4161上呢,会建立一个http server,用于和nsqadmin进行数据交互。
nsqd
官方文档地址:http://bitly.github.io/nsq/components/nsqd.html
用官方话解释为:nsqd接收队列、发送消息到客户端。
上一讲中,执行的第二个命令:nsqd –lookupd-tcp-address=127.0.0.1:4160
表示启动一个nsqd 服务,同时告诉这个服务,nsqlookupd的地址在127.0.0.1:4160。4160端口,也就是nsqlookupd监听的tcp erver的地址。有了这个地址后,nsqd就可以和nsqlookupd地建立连接,然后做数据交互。同时,nsqd自己会默认监听4151端口,接收以http方式发送来的消息数据。
nsqadmin
官方文档见:http://bitly.github.io/nsq/components/nsqadmin.html
提供一个浏览器可访问的web页面,用于实时查看集群状态和执行一些管理操作。
上一讲中,第三个命令:nsqadmin –lookupd-http-address=127.0.0.1:4161
表示启动nsqadmin,同时告诉这个服务,nsqlookupd监听的http地址在127.0.0.1:4161,这样,nsqadmin也会和nsqlookupd建立连接,进行数据交互。而nsqadmin 本身会监听4171端口,提供一个web服务,供浏览器访问,查看数据。所以在上一讲,最后我们通过访问http://127.0.0.1:4171/查看统计数据。
curl
这个应该都很熟悉的命令,它可以发起网络请求到指定的URL。可以参考网址:
http://blog.51yip.com/linux/1049.html
上一讲中:
curl -d “hello world 1” “http://127.0.0.1:4151/put?topic=test”
表示向网址http://127.0.0.1:4151/put?topic=test发起POST请求,参数为hello world 1,这4151端口,刚好是nsqd监听的端口,也就是说nsqd可以接口网络发来的信息,并放入队列保存起来,供消息的“消费者”来取出数据并处理。所以前面介绍nsqd的时候提到“nsqd接收、队列、发送消息到客户端。”。
nsq_to_file
这是nsq提供一个简单的消息“消费者”,他把某个指定“topic”下的数据存在指定的文件中。
上一讲的命令:
nsq_to_file –topic=test –output-dir=F:\tmp –lookupd-http-address=127.0.0.1:4161
表示把指定的话题test下的数据,放在目录F:\tmp下面。所以可以看到文件中保存了三个hello world,因为我们向topic=test的URL curl了三次hello world.
同时大家可能会注意到,nsq_to_file指定的最后一个参数,lookupd-http-address的4161端口是nsqlookupd的地址,不是nsqd的,而我们curl发消息是发到nsqd的4151端口了,这是什么原因呢?
源码我也没读完,呵呵,所以呢,目前猜测是因为nsqlookupd维护着所有nsqd的状态。知道nsqlookupd的地址后,就可以问nsqlookupd要所有的nsqd的信息了。
补充一个图:

举例
到此为止,几个命令都说完了。为方便理解,接下来讲个形象的例子。
nsqd 可以看作是一个人。
nsqlookupd 是公安局的户籍办。
nsqadmin 是人口普查办公室。
每产生一个nsqd,都要连到nsqlookupd汇报状态,及定时发送心跳包。对应的:每个人出生或者过世,都要到户籍办去上户或销户,而平时有生之年,你可能还要偶尔去去户籍办,出个户籍证明之类的。
管理者可以通过nsqadmin来查看统计数据,同时做一些管理操作。对应的,人品普查的时候,可以通过公安局来查看,各地区的人口数、性别比例、年龄分布等等。
例子不太恰当,不过对理解也有些帮助,就放在这里了。
nsqlookupd:
官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html
用官方话来讲是:nsqlookupd管理拓扑信息,客户端根据特定的topic查询nsqlookupd来发现nsqd生产者及nsqd广播topic和channel信息。比较难懂,所以接下来,用通俗的话来解释。
首先讲点别的东西,用过linux的同学可能会发现,linux下很多应用,比如apache、mysql、ftp等它们的服务名称都是在d结尾的。如:
apache -> httpd
mysql -> mysqld
vsftp -> vsftpd
最后的结尾d是Daemon的意思,守护进程,这种进程不会因为终端窗口关闭就停止执行。比如apache,执行 service httpd start后,apache就启动了, 终端关掉后,apache仍然在后台运行。
好了,现在你会发现,我们的nsqlookupd和nsqd也是在d结尾的,这就暗示他们可能是守护进程,而事实上也确实是这样。
nsqlookupd就是类似apache一样的一个后台服务,它可以理解为整个nsq系统的神经中枢,启动以后,它默认会同时监听两个端口,在4160端口,建立一个tcp server,用于和nsqd进行数据沟通。在4161上呢,会建立一个http server,用于和nsqadmin进行数据交互。
nsqd
官方文档地址:http://bitly.github.io/nsq/components/nsqd.html
用官方话解释为:nsqd接收队列、发送消息到客户端。
上一讲中,执行的第二个命令:nsqd –lookupd-tcp-address=127.0.0.1:4160
表示启动一个nsqd 服务,同时告诉这个服务,nsqlookupd的地址在127.0.0.1:4160。4160端口,也就是nsqlookupd监听的tcp erver的地址。有了这个地址后,nsqd就可以和nsqlookupd地建立连接,然后做数据交互。同时,nsqd自己会默认监听4151端口,接收以http方式发送来的消息数据。
nsqadmin
官方文档见:http://bitly.github.io/nsq/components/nsqadmin.html
提供一个浏览器可访问的web页面,用于实时查看集群状态和执行一些管理操作。
上一讲中,第三个命令:nsqadmin –lookupd-http-address=127.0.0.1:4161
表示启动nsqadmin,同时告诉这个服务,nsqlookupd监听的http地址在127.0.0.1:4161,这样,nsqadmin也会和nsqlookupd建立连接,进行数据交互。而nsqadmin 本身会监听4171端口,提供一个web服务,供浏览器访问,查看数据。所以在上一讲,最后我们通过访问http://127.0.0.1:4171/查看统计数据。
curl
这个应该都很熟悉的命令,它可以发起网络请求到指定的URL。可以参考网址:
http://blog.51yip.com/linux/1049.html
上一讲中:
curl -d “hello world 1” “http://127.0.0.1:4151/put?topic=test”
表示向网址http://127.0.0.1:4151/put?topic=test发起POST请求,参数为hello world 1,这4151端口,刚好是nsqd监听的端口,也就是说nsqd可以接口网络发来的信息,并放入队列保存起来,供消息的“消费者”来取出数据并处理。所以前面介绍nsqd的时候提到“nsqd接收、队列、发送消息到客户端。”。
nsq_to_file
这是nsq提供一个简单的消息“消费者”,他把某个指定“topic”下的数据存在指定的文件中。
上一讲的命令:
nsq_to_file –topic=test –output-dir=F:\tmp –lookupd-http-address=127.0.0.1:4161
表示把指定的话题test下的数据,放在目录F:\tmp下面。所以可以看到文件中保存了三个hello world,因为我们向topic=test的URL curl了三次hello world.
同时大家可能会注意到,nsq_to_file指定的最后一个参数,lookupd-http-address的4161端口是nsqlookupd的地址,不是nsqd的,而我们curl发消息是发到nsqd的4151端口了,这是什么原因呢?
源码我也没读完,呵呵,所以呢,目前猜测是因为nsqlookupd维护着所有nsqd的状态。知道nsqlookupd的地址后,就可以问nsqlookupd要所有的nsqd的信息了。
补充一个图:

举例
到此为止,几个命令都说完了。为方便理解,接下来讲个形象的例子。
nsqd 可以看作是一个人。
nsqlookupd 是公安局的户籍办。
nsqadmin 是人口普查办公室。
每产生一个nsqd,都要连到nsqlookupd汇报状态,及定时发送心跳包。对应的:每个人出生或者过世,都要到户籍办去上户或销户,而平时有生之年,你可能还要偶尔去去户籍办,出个户籍证明之类的。
管理者可以通过nsqadmin来查看统计数据,同时做一些管理操作。对应的,人品普查的时候,可以通过公安局来查看,各地区的人口数、性别比例、年龄分布等等。
例子不太恰当,不过对理解也有些帮助,就放在这里了。
go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin的更多相关文章
- (转)go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin
转自:http://www.baiyuxiong.com/?p=886 ---------------------------------------------------------------- ...
- go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go
从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...
- go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go
本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go.context.go和wait_group_wrapper.go. options.go 123456789101 ...
- go语言nsq源码解读五 nsqlookupd源码registration_db.go
本篇将讲解registration_db.go文件. 1234567891011121314151617181920212223242526272829303132333435363738394041 ...
- go语言nsq源码解读八 http.go、http_server.go
这篇讲另两个文件http.go.http_server.go,这两个文件和第六讲go语言nsq源码解读六 tcp.go.tcp_server.go里的两个文件是相对应的.那两个文件用于处理tcp请求, ...
- go语言nsq源码解读七 lookup_protocol_v1.go
本篇将解读nsqlookup处理tcp请求的核心代码文件lookup_protocol_v1.go. 1234567891011121314151617181920212223242526272829 ...
- go语言nsq源码解读一-基本介绍
简单介绍一下nsq. 参考 http://feilong.me/2013/05/nsq-realtime-message-processing-system 的介绍:NSQ是由知名短链接服务商bitl ...
- go语言nsq源码解读九 tcp和http中channel、topic的增删
通过前面多篇文章,nsqlookupd基本已经解读完毕了,不过在关于channel和topic的增删上还比较模糊,所以本篇将站在宏观的角度来总结一下,tcp.go和http.go两个文件中关于chan ...
- go语言nsq源码解读六 tcp.go、tcp_server.go
本篇讲nsqlookupd中tcp.go.tcp_server.go tcp_server.go位于util目录下. 12345678910111213141516171819202122232425 ...
随机推荐
- Ruby 2.1: objspace.so
原文 http://tmm1.net/ruby21-objspace/ 26 Dec 2013 ObjectSpace in ruby contains many useful heap debug ...
- MOOS学习笔记4——独立线程不同回调
MOOS学习笔记4--独立线程不同回调 /** * @fn 独立线程不同回调 * @version v1.0 * @author */ #include "MOOS/libMOOS/Comm ...
- java并发包小结(二)
接上一篇 java并发包小结(一):http://blog.csdn.net/aalansehaiyang52/article/details/8877579 Future 接口Future 接口允许 ...
- JavaScript头像上传器的实现
最近做这方面的东西,刚开始准备用一个开源项目:https://github.com/yueyoum/django-upload-avatar 后来发现这个开源组件的原设计者的定制化选项设计略显复杂,发 ...
- AngualrJS之服务器端通信
译自<AngularJS> 与服务器通信 目前,我们已经接触过下面要谈的主题的主要内容,这些内容包括你的Angular应用如何规划设计.不同的angularjs部件如何装配在一起并正常工作 ...
- Ocelot中文文档-缓存
目前Ocelot使用CacheManager项目提供了一些非常基本的缓存.这是一个了不起的项目,它解决了很多缓存问题. 我会推荐这个软件包来做Ocelot缓存. 如果你看看这里的例子,你可以看到如何设 ...
- es6(三):es6中函数的扩展(参数默认值、rest参数、箭头函数)
1.函数可以设置参数默认值 function test1(x,y=1){ console.log(x,y) } test1(10)//10 1 2.rest参数:形式为...变量名 function ...
- 基于DP的LCS(最长公共子序列)问题
最长公共子序列,即给出两个序列,给出最长的公共序列,例如: 序列1 understand 序列2 underground 最长公共序列undernd,长度为7 一般这类问题很适合使用动态规划,其动态规 ...
- 一文读懂阻塞、非阻塞、同步、异步IO
介绍 在谈及网络IO的时候总避不开阻塞.非阻塞.同步.异步.IO多路复用.select.poll.epoll等这几个词语.在面试的时候也会被经常问到这几个的区别.本文就来讲一下这几个词语的含义.区别以 ...
- 洛谷 P1879 解题报告
P1879 [USACO06NOV]玉米田Corn Fields 题目描述 农场主\(John\)新买了一块长方形的新牧场,这块牧场被划分成\(M\)行\(N\)列\((1 ≤ M ≤ 12; 1 ≤ ...