转自:http://www.baiyuxiong.com/?p=886
-----------------------------------------------------------------------

上一篇go语言nsq源码解读-基本介绍  介绍了最基本的nsq环境搭建及使用。在最后使用时,我们用到了几个命令:nsqlookupd、nsqd、nsqadmin、curl及 nsq_to_file,并看到用curl命令写入的几个”hello world”被nsq_to_file命令保存在了硬盘文件中。本节中,将讲述这几个命令的作用、用法。

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的信息了。

补充一个图:

(转)go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin的更多相关文章

  1. go语言nsq源码解读二 nsqlookupd、nsqd与nsqadmin

    nsqlookupd: 官方文档解释见:http://bitly.github.io/nsq/components/nsqlookupd.html 用官方话来讲是:nsqlookupd管理拓扑信息,客 ...

  2. go语言 nsq源码解读三 nsqlookupd源码nsqlookupd.go

    从本节开始,将逐步阅读nsq各模块的代码. 读一份代码,我的思路一般是: 1.了解用法,知道了怎么使用,对理解代码有宏观上有很大帮助. 2.了解各大模块的功能特点,同时再想想,如果让自己来实现这些模块 ...

  3. go语言 nsq源码解读四 nsqlookupd源码options.go、context.go和wait_group_wrapper.go

    本节会解读nsqlookupd.go文件中涉及到的其中三个文件:options.go.context.go和wait_group_wrapper.go. options.go 123456789101 ...

  4. go语言nsq源码解读五 nsqlookupd源码registration_db.go

    本篇将讲解registration_db.go文件. 1234567891011121314151617181920212223242526272829303132333435363738394041 ...

  5. go语言nsq源码解读八 http.go、http_server.go

    这篇讲另两个文件http.go.http_server.go,这两个文件和第六讲go语言nsq源码解读六 tcp.go.tcp_server.go里的两个文件是相对应的.那两个文件用于处理tcp请求, ...

  6. go语言nsq源码解读七 lookup_protocol_v1.go

    本篇将解读nsqlookup处理tcp请求的核心代码文件lookup_protocol_v1.go. 1234567891011121314151617181920212223242526272829 ...

  7. go语言nsq源码解读一-基本介绍

    简单介绍一下nsq. 参考 http://feilong.me/2013/05/nsq-realtime-message-processing-system 的介绍:NSQ是由知名短链接服务商bitl ...

  8. go语言nsq源码解读九 tcp和http中channel、topic的增删

    通过前面多篇文章,nsqlookupd基本已经解读完毕了,不过在关于channel和topic的增删上还比较模糊,所以本篇将站在宏观的角度来总结一下,tcp.go和http.go两个文件中关于chan ...

  9. go语言nsq源码解读六 tcp.go、tcp_server.go

    本篇讲nsqlookupd中tcp.go.tcp_server.go tcp_server.go位于util目录下. 12345678910111213141516171819202122232425 ...

随机推荐

  1. js判断当前移到浏览器版本

     navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i) 

  2. 自己动手做——简易下载工具 SimpleDownloader

    一.说明 二.开发 三.源代码 源代码:https://github.com/FrankFan/SimpleDownloader 可执行文件下载地址

  3. Xcode8 带来的新特性和坑

    Xcode8新特性 Interface Builder 随着14年的iPhone6和6P出来之后,iPhone的屏幕尺寸也越来越多,屏幕适配是一个需要解决的问题,以后不一定苹果又出什么尺寸的iPhon ...

  4. 进阶之路(中级篇) - 016 温湿度传感器DHT11

    如果想使用 Arduino 开发板驱动 DHT11 来获取温湿度的时候建议使用第三方的库,这样可以加快程序的开发速度,而且不容易出错,下面的代码我已经安转了第三方的库了.详细的安装方法请参考极客先锋的 ...

  5. 收集一些常用Javascripot

    获取一组单选框当前选择值: $("input[name='radGende']:checked").val();

  6. Andoird通信之简单聊天ChatApp

    Android通信,大体上的逻辑是跟Java上的通信是差不多的,只是因为Android线程不能直接访问UI界面组件,所以在处理的时候有些麻烦,只要是通过Handle处理. 接下来是一个简单地手机聊天A ...

  7. nginx无法启动异常

    Nginx安装过程中可能会报如下错误: /usr/local/nginx/sbin/nginx -t /usr/local/nginx/sbin/nginx: error while loading ...

  8. explicit_defaults_for_timestamp参数

    Introduced 5.6.6 Deprecated 5.6.6 Command-Line Format --explicit_defaults_for_timestamp=# System Var ...

  9. 怎样让HTML 表格中内容自动换行??

    <table style="word-break:break-all; word-wrap:break-all;">

  10. 【转载】Eclipse中.setting目录下文件介绍

    原文:http://blog.csdn.net/huaweitman/article/details/52351394 Eclipse在新建项目的时候会自动生成一些文件.这些文件比如.project. ...