一. 安装

参考:
http://nsq.io/deployment/installing.html
http://www.baiyuxiong.com/?p=873    (推荐.)

不推荐直接把官方的Binary Releases版本down下来扔bin目录.
建议用“Building From Source”方式(看下面的步骤),这样可以把source下到$GOPATH/src里并同时把程序build到$GOPATH/bin里. (然后可以把这个bin目录添加到环境变量$sudo vi /etc/profile加一行:export PATH=$PATH:$GOPATH/bin.)

步骤:
(假设已经有golang环境)
1.VPNFQ. (因为需要访问code.google.com)
2.sudo chown -R xiaou $GOPATH #这个在搞golang环境的时候就设置过了.不搞的话,go get会报错.

接下来才是真正的nsq安装步骤:
3.go get github.com/kr/godep
4.go get github.com/bmizerany/assert
5.godep get github.com/bitly/nsq/...
执行之后在$GOPATH/bin下会有很多可执行文件.

二 部署与测试
依次在不同终端执行这些命令:
1.nsqlookupd
2.nsqd --lookupd-tcp-address=127.0.0.1:4160
3.nsqadmin --lookupd-http-address=127.0.0.1:4161
4.curl -d "hello world 1" "http://127.0.0.1:4151/put?topic=test"
5.nsq_to_file --topic=test --output-dir=F:\tmp --lookupd-http-address=127.0.0.1:4161
6.curl -d "hello world 2" "http://127.0.0.1:4151/put?topic=test"
curl -d "hello world 3" "http://127.0.0.1:4151/put?topic=test"
浏览器访问:http://127.0.0.1:4171/

这些,nsqlookupd是枢纽。nsqd是接受和转发消息的服务。nsqadmin是多余的,一个查看服务状态web页面。nsq_to_file是消息的消费者。curl -d是以http的post方式向nsqd发出消息,即消息的生产者。可见,对于nsq消息分发系统来说,只有nsqlookupd+nsqd是必须的。
图解:

三 python写的 发送者和消费者

这是nsq官方写的python库. 在这里:https://github.com/bitly/pynsq
安装:
pip install pynsq

测试:

首先执行命令:
1.nsqlookupd
2.nsqd --lookupd-tcp-address=127.0.0.1:4160

然后写py脚本并运行:
(文档:https://pynsq.readthedocs.org/en/latest/writer.html)

#消费者:
import nsq

def handler(message):
    print message.body
    return True

r = nsq.Reader(message_handler=handler,
        nsqd_tcp_addresses=['127.0.0.1:4150'],
        topic='test_topic', channel='asdfxx', lookupd_poll_interval=15)
nsq.run() #这run调用了tornado.ioloop.IOLoop.instance().start()

#生产者:
import nsq
import tornado.ioloop
import time

def pub_message():
    def finish_pub(conn, data):
        print data
    writer.pub('test_topic', time.strftime('%H:%M:%S'), finish_pub)

writer = nsq.Writer(['127.0.0.1:4150'])
tornado.ioloop.PeriodicCallback(pub_message, 5000).start()
nsq.run()

nsq初探的更多相关文章

  1. 深入NSQ 之旅[转载]

    介绍 NSQ是一个实时的分布式消息平台.它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架.这篇文章介绍了 基于go语言的NSQ的内部架构,它能够为高吞吐量的网络服务器带来 性能 ...

  2. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  3. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  4. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  5. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  6. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  7. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

  8. 【手把手教你全文检索】Apache Lucene初探

    PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...

  9. Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用

    一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...

随机推荐

  1. Java 标识符、数据类型、运算符

    一.标识符 1.组成 首字母(字母,下划线,﹩)+其余部分(数字,字母,下划线,﹩) 2.命名规范 ①由大小写字母.下划线.数字.﹩ ②数字不能开头 ③标识符长度没有限制 ④标识符不能是关键字和保留字 ...

  2. 第六章 springboot + 事务(转载)

    本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5350106.html 在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. myba ...

  3. linux 怎么完全卸载mysql数据库

    在linux下开发,mysql数据库是经常用到的,对于初学者来说,在linux怎么安装卸载mysql数据库,也许可能比较痛苦,这里简单介绍下,怎么卸载msql数据库. a)查看系统中是否以rpm包安装 ...

  4. windows读取mac格式移动硬盘的方法

    本文记录了一些window与mac数据在移动设备上互相拷贝的经验. 一.准备 家里有一台mac电脑,限于硬盘空间比较小,需要定期备份一些数据. 由于备份数据大小在20G左右,并且并没有压缩为一个压缩文 ...

  5. Laravel 5.x 启动过程分析 [转]

    1.初始化Application 1.1 注册基本绑定 app -> Application实例(Illuminate\Foundation\Application) Illuminate\Co ...

  6. Ruby:字符串处理函数

    字符串处理函数1.返回字符串的长度 str.length => integer 2.判断字符串中是否包含另一个串 str.include? other_str => true or fal ...

  7. delphi XE5皮肤的使用

      做皮肤其实是项浩大的工程,从美工设计.到贴图.到程序设计,都非常的麻烦,如果不是一个非常成熟的产品且有很大的用户群体,并且公司具有相当实力,一般都不会去自己做皮肤,毕竟涉及的东西太多,一旦出现问题 ...

  8. 如果因特网中的所有链路都提供可靠的交付服务,TCP可靠传输服务是多余的吗?

    IP协议因为是无连接的, 所以其传输是不可靠的.虽然链路保证了数据包在端到端的传输中不发生差错,但是它不能保证IP数据包是按照正确的书需到达最终的目的地.IP数据包可以使用不同的路由通过网络,到达接收 ...

  9. 分组背包——sicily 1750

    1750. 运动会 限制条件 时间限制: 1 秒, 内存限制: 32 兆 题目描述 ZEH是一名04级的学生,他除了绩点高,还有运动细胞.有一次学院举办运动会,ZEH发现里面的 项目都是他所向披靡的, ...

  10. Android之ListView——ArrayAdapter的用法学习

    当我们使用ListView时,必不可少的便会使用到adapter,adapter的用处就像是一个水管接口,把你想展现的数据与你希望展现的布局样式通过某种协定结合起来. ArrayAdapter针对每个 ...