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:\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()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM