zoukankan      html  css  js  c++  java
  • nsq初探

    一. 安装

    参考:
    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.VPN翻墙. (因为需要访问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: mp --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()

  • 相关阅读:
    Java实现简易聊天室
    Jnetpcap简述
    Win10系统配置Java环境变量
    截取HTML中的JSON数据并利用GSON进行解析(Android)
    Android实现监听控件点击事件
    Android实现点击两次返回退出APP
    简述RadioGroup和RadioButton的使用
    服务的最佳实践--完整版的下载示例
    使用HTTP协议访问网络(Android)
    补充1:IDA的脚本IDC语言
  • 原文地址:https://www.cnblogs.com/xiaouisme/p/3970086.html
Copyright © 2011-2022 走看看