nsq消息隊列

0育苟、前面的話

為什么需要消息隊列抖僵?下面通過幾個場景來簡單解釋,具體可以參看其他資料此處不再展開镰绎。

  1. 應(yīng)用解耦
  2. 流量削峰
  3. 異步處理

1脓斩、NSQ介紹

1.1 NSQ是什么?

一句話NSQ是一種消息隊列畴栖,和常見的消息隊列如Kafka随静,RocketMQ所扮演的角色一致,NSQ是golang生態(tài)中經(jīng)常使用的消息隊列組件吗讶。常被用在應(yīng)用解耦燎猛,流量削峰等場景中。

1.2 名詞解釋:

Topic主題: 同一主題的消息歸為一類照皆,功能類似于大部分消息隊列中的含義重绷。
Channel: 同一主題下可以再細分為不同的channel通道,每個channel通道中存放的消息都是相同的相互獨立膜毁。
Node節(jié)點: 一個nsqd啟動實例為一個node節(jié)點昭卓。
Message: 具體業(yè)務(wù)數(shù)據(jù)

2、NSQ消息隊列優(yōu)缺點

2.1 優(yōu)點:

NSQ相比起其他消息隊列組件部署非常簡單瘟滨,極簡的配置候醒。
NSQ支持橫向擴展,可以動態(tài)增加node節(jié)點杂瘸。
官方給的結(jié)論-高性能火焰。
消息最少被消費一次不丟失。
提供內(nèi)存和磁盤的組合消息隊列 --mem-queue-size 來設(shè)置消息隊列存儲在內(nèi)存胧沫,磁盤或者兩者昌简。

2.2 缺點:

NSQ不保證消息的有序性,這點和Kafka類的有序消息隊列不同绒怨。
Node節(jié)點之間相互獨立纯赎,沒有消息的復(fù)制。這點既是優(yōu)點也是缺點吧南蹂。


3犬金、NSQ組件構(gòu)成

3.1 nsqlookupd:

主要負責(zé)管理整體拓撲信息。

客戶端可以通過向nsqlookupd守護進程請求查詢信息,來獲取topic晚顷,channel所在的nsqd服務(wù)節(jié)點地址峰伙。
nsqd服務(wù)節(jié)點向nsqlookupd服務(wù)廣播節(jié)點本身所包含的地址topic,channel信息该默。
nsqadmin界面服務(wù)向nsqlookupd服務(wù)請求展示所需的信息瞳氓。

特點:
唯一性:在一個NSQ消息隊列組件中可以只有一個nsqlookupd服務(wù),也可以有多個栓袖,相互之間獨立匣摘。
去中心化:nsqlookupd服務(wù)異常時,不影響真正的消息服務(wù)(nsqd)裹刮。

3.2 nsqd:

真正的負責(zé)接收消息音榜,入隊列,投遞消息的服務(wù)捧弃。


image

特點:

訂閱同一個topic赠叼,同一個channel的消費者使用負載均衡策略,見下圖违霞。
確保消息隊列中的消息至少被消費一次嘴办。
內(nèi)存+磁盤的組合使用,nsqd可以通過--mem-queue-size來限定消息隊列在內(nèi)存中的大小葛家,一旦消息隊列中的message數(shù)量超出限定大小户辞,則會序列化到磁盤中泌类。
topic這channel無需事先創(chuàng)建癞谒,在客戶端中的生產(chǎn)者和消費者首次使用時創(chuàng)建。

3.3 nsqadmin:

整體webUI界面刃榨,可以通過該界面來管理NSQ集群弹砚,和顯示NSQ組件內(nèi)部topic,channel枢希,node桌吃,messege的數(shù)量狀態(tài)等信息。

3.4 其他工具:

nsq_to_file苞轿、nsq_tail茅诱、nsq_to_http、nsq_to_nsq等搬卒,具體工具使用功能可以自行百度瑟俭。


4、NSQ部署

兩種部署方式:一種是直連模式契邀,客戶端直接連接nsqd服務(wù)進行message的消費摆寄。另外一種是nsqlookupd模式,客戶端通過連接nsqlookupd獲取topic所在nsqd服務(wù)的地址進行message的消費。

4.1 直連模式:

消費者和生產(chǎn)者直接連接nsqd服務(wù)進行生產(chǎn)消費微饥,nsqd服務(wù)之間相互獨立逗扒。


alt

4.2 nsqlookupd模式:

生產(chǎn)則直連nsqd進行生產(chǎn),消費者通過連接nsqlookupd服務(wù)查詢nsqd服務(wù)地址之后連接nsqd服務(wù)進行消費欠橘。


image

4.3 案例

這里選用nsqlookupd模式來實際部署案例

4.3.1 下載部署包

這里為了演示方便矩肩,直接下載的Windows平臺的二進制包,開箱即用简软。


image

4.3.2 nsqlookupd

部署nsqlookupd 直接運行nsqlookupd即可蛮拔,默認監(jiān)聽tcp端口4160,http端口4161

4.3.3 nsqd

部署nsqd 參數(shù)中傳入nsqlookupd的tcp監(jiān)聽IP地址和端口痹升,服務(wù)默認監(jiān)聽tcp端口4150建炫,http端口4151

4.3.4 nsqadmin

部署nsqadmin webUI界面,服務(wù)默認監(jiān)聽http端口4171


5疼蛾、NSQ生產(chǎn)者消費者使用

5.1 現(xiàn)有工具

生產(chǎn)者可以直接發(fā)送http請求到nsqd服務(wù)來生產(chǎn)消息

curl -d 'hello world 1' 'http://127.0.0.1:4151/pub?topic=test'

消費者請求nsqlookupd查找topic所在的nsqd節(jié)點肛跌,并進行消費

nsq_tail --topic=test --lookupd-http-address=127.0.0.1:4161

5.2 go-nsq

golang官方提供了go-nsq包進行客戶端生產(chǎn)消費,這里簡單實用

生產(chǎn)者代碼:

var (
    tcpnsqaddr = "127.0.0.1:4150"
)
func main() {
    config := nsq.NewConfig()
    producer,err := nsq.NewProducer(tcpnsqaddr,config)
    if err != nil{
        fmt.Println("nsq.NewProducer")
        return
    }
    for i:= 0;i<10;i++{
        producer.Publish("kkk",[]byte("this is first " + strconv.Itoa(i)))
        time.Sleep(time.Second)
    }
    producer.Ping()
    producer.Stop()
}

消費者代碼:

type MyHandle int
func (c MyHandle)HandleMessage(message *nsq.Message) error{
    fmt.Println(string(message.Body))
    return nil
}
func main()  {
    config := nsq.NewConfig()
    com,_ := nsq.NewConsumer("kkk","ccc",config)
    var tmp MyHandle
    com.AddHandler(tmp)
    com.ConnectToNSQLookupd("127.0.0.1:4161")
    time.Sleep(time.Second * 100)
}

6察郁、參考

https://github.com/nsqio/nsq

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衍慎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子皮钠,更是在濱河造成了極大的恐慌稳捆,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件麦轰,死亡現(xiàn)場離奇詭異乔夯,居然都是意外死亡,警方通過查閱死者的電腦和手機款侵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門末荐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人新锈,你說我怎么就攤上這事甲脏。” “怎么了妹笆?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵块请,是天一觀的道長。 經(jīng)常有香客問我拳缠,道長墩新,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任脊凰,我火速辦了婚禮抖棘,結(jié)果婚禮上茂腥,老公的妹妹穿的比我還像新娘。我一直安慰自己切省,他們只是感情好最岗,可當(dāng)我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著朝捆,像睡著了一般般渡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芙盘,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天驯用,我揣著相機與錄音,去河邊找鬼儒老。 笑死蝴乔,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的驮樊。 我是一名探鬼主播薇正,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼囚衔!你這毒婦竟也來了挖腰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤练湿,失蹤者是張志新(化名)和其女友劉穎猴仑,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肥哎,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡辽俗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贤姆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榆苞。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡稳衬,死狀恐怖霞捡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄疚,我是刑警寧澤碧信,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站街夭,受9級特大地震影響砰碴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜板丽,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一呈枉、第九天 我趴在偏房一處隱蔽的房頂上張望趁尼。 院中可真熱鬧,春花似錦猖辫、人聲如沸酥泞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芝囤。三九已至,卻和暖如春辛萍,著一層夾襖步出監(jiān)牢的瞬間悯姊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工贩毕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留悯许,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓辉阶,卻偏偏與公主長得像岸晦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子睛藻,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 1.安裝 根據(jù)官方安裝指引頁面下載最新穩(wěn)定版的二進制包https://nsq.io/deployment/inst...
    渺小Y閱讀 7,008評論 1 4
  • 1. 概述 NSQ 是一個基于Go語言的分布式實時消息平臺启上,它基于MIT開源協(xié)議發(fā)布,由bitly公司開源出來的一...
    楚江云閱讀 6,679評論 0 10
  • 異步任務(wù)與消息隊列 同步任務(wù):一定要等任務(wù)執(zhí)行完了店印,得到結(jié)果冈在,才執(zhí)行下一個任務(wù)。 異步任務(wù):不用等任務(wù)執(zhí)行完按摘,直接...
    王司技術(shù)談閱讀 919評論 0 0
  • NSQ是一個實時的分布式消息平臺包券。它的設(shè)計目標(biāo)是為在多臺計算機上運行的松散服務(wù)提供一個現(xiàn)代化的基礎(chǔ)設(shè)施骨架。 NS...
    零一間閱讀 2,193評論 0 2
  • 下載地址:https://github.com/nsqio/nsq/releases nsqlookupd 會監(jiān)聽...
    皮皮蝦_132a閱讀 789評論 0 0