golang 使用nsq消息隊(duì)列

NSQ是一個(gè)基于Go語言的分布式實(shí)時(shí)消息平臺(tái),它基于MIT開源協(xié)議發(fā)布畜吊,代碼托管在GitHub步清。NSQ可用于大規(guī)模系統(tǒng)中的實(shí)時(shí)消息服務(wù),并且每天能夠處理數(shù)億級(jí)別的消息榜晦,其設(shè)計(jì)目標(biāo)是為在分布式環(huán)境下運(yùn)行的去中心化服務(wù)提供一個(gè)強(qiáng)大的基礎(chǔ)架構(gòu)冠蒋。NSQ具有分布式、去中心化的拓?fù)浣Y(jié)構(gòu)乾胶,該結(jié)構(gòu)具有無單點(diǎn)故障抖剿、故障容錯(cuò)灰追、高可用性以及能夠保證消息的可靠傳遞的特征棘捣。NSQ非常容易配置和部署介陶,且具有最大的靈活性看幼,支持眾多消息協(xié)議贸人。另外艘包,官方還提供了拆箱即用Go和Python庫褒颈。

部署

官網(wǎng)下載地址

安裝步驟

# 下載
wget https://s3.amazonaws.com/bitly-downloads/nsq/nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
# 解壓
tar -zxvf nsq-1.1.0.linux-amd64.go1.10.3.tar.gz
# 啟動(dòng)服務(wù)
cd nsq-1.1.0.linux-amd64.go1.10.3/bin/
nohup ./nsqlookupd > /dev/null 2>&1 &
nohup ./nsqd --lookupd-tcp-address=127.0.0.1:4160 > /dev/null 2>&1 &
nohup ./nsqadmin --lookupd-http-address=127.0.0.1:4161 > /dev/null 2>&1 &

使用

1廓推、創(chuàng)建一個(gè)test主題甥温,并發(fā)送一個(gè)hello world消息

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

2锻煌、瀏覽器訪問NSQ的管理界面: http://127.0.0.1:4171/

image.png

3 消費(fèi)test主題的消息

$ ./nsq_to_file --topic=test --output-dir=/tmp --lookupd-http-address=127.0.0.1:4161
2019/03/13 11:09:49 INF    1 [test/nsq_to_file] querying nsqlookupd http://127.0.0.1:4161/lookup?topic=test
2019/03/13 11:09:49 INF    1 [test/nsq_to_file] (jinchunguang-TM1701:4150) connecting to nsqd
2019/03/13 11:09:49 INFO: opening /tmp/test.jinchunguang-TM1701.2019-03-13_11.log
2019/03/13 11:09:49 syncing 1 records to disk

$ cat /tmp/test.jinchunguang-TM1701.2019-03-13_11.log
hello world

客戶端

生產(chǎn)者可使用PHP curl 直接處理,github有許多現(xiàn)成的客戶端可以使用

<?php

$msg="最簡單的發(fā)送消息方式!";
$url= "http://127.0.0.1:4151/pub?topic=test";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $msg);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: text/html; charset=utf-8',
        'Content-Length: ' . strlen($msg))
);
$output = curl_exec($ch);
if($output === FALSE ){
    echo "CURL Error:".curl_error($ch);
}

使用go來處理

代碼目錄結(jié)構(gòu)如下(示例項(xiàng)目,通過gin封裝的姻蚓,學(xué)習(xí)使用)

image.png

nsq.go 簡單封裝nsq操作


package servers

import (
    "fmt"
    "github.com/nsqio/go-nsq"
)

// 默認(rèn)配置
const HOST  = "127.0.0.1:4150"
const TOPIC_NAME  = "test"
const CHANNEL_NAME  = "test-channel"

// 啟動(dòng)Nsq
func NsqRun()  {
    Consumer()
}

// nsq發(fā)布消息
func Producer(msgBody string) {
    // 新建生產(chǎn)者
    p, err := nsq.NewProducer(HOST, nsq.NewConfig())
    if err != nil {
        panic(err)
    }
    // 發(fā)布消息
    if err := p.Publish(TOPIC_NAME, []byte(msgBody)); err != nil {
        panic(err)
    }
}


// nsq訂閱消息
type ConsumerT struct{}

func (*ConsumerT) HandleMessage(msg *nsq.Message) error {
    fmt.Println(string(msg.Body))
    return nil
}

func Consumer() {
    c, err := nsq.NewConsumer(TOPIC_NAME, CHANNEL_NAME, nsq.NewConfig())   // 新建一個(gè)消費(fèi)者
    if err != nil {
        panic(err)
    }
    c.AddHandler(&ConsumerT{})                                           // 添加消息處理
    if err := c.ConnectToNSQD(HOST); err != nil {            // 建立連接
        panic(err)
    }
}

main.go 項(xiàng)目入口文件

package main

import (
    "github.com/gin-gonic/gin"
    "wages_service/servers"
    "wages_service/tasks"
)

var GinEngine *gin.Engine

func main() {

    // 運(yùn)行 task
    tasks.SyncDataRun()

    // 運(yùn)行 nsq
    servers.NsqRun()

    // 運(yùn)行server
    servers.HttpRun(GinEngine)
}

nsq_producer.go 我們測試用來發(fā)送消息的

package main

import "wages_service/servers"

func main()  {
    // 發(fā)送消息到nsq
    servers.Producer("hello world!!!")
}

運(yùn)行測試

  • 啟動(dòng)項(xiàng)目
image.png
  • 推送消息


    image.png
  • 查看結(jié)果

image.png

Nsql官網(wǎng)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宋梧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狰挡,更是在濱河造成了極大的恐慌捂龄,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件加叁,死亡現(xiàn)場離奇詭異倦沧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)殉农,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門刀脏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人超凳,你說我怎么就攤上這事愈污。” “怎么了轮傍?”我有些...
    開封第一講書人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵暂雹,是天一觀的道長。 經(jīng)常有香客問我创夜,道長杭跪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涧尿,結(jié)果婚禮上系奉,老公的妹妹穿的比我還像新娘。我一直安慰自己姑廉,他們只是感情好缺亮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著桥言,像睡著了一般萌踱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上号阿,一...
    開封第一講書人閱讀 51,754評(píng)論 1 307
  • 那天并鸵,我揣著相機(jī)與錄音,去河邊找鬼扔涧。 笑死园担,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枯夜。 我是一名探鬼主播粉铐,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼卤档!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起程剥,我...
    開封第一講書人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤劝枣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后织鲸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舔腾,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年搂擦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了稳诚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瀑踢,死狀恐怖扳还,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情橱夭,我是刑警寧澤氨距,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站棘劣,受9級(jí)特大地震影響俏让,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一首昔、第九天 我趴在偏房一處隱蔽的房頂上張望寡喝。 院中可真熱鬧,春花似錦勒奇、人聲如沸预鬓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽珊皿。三九已至,卻和暖如春巨税,著一層夾襖步出監(jiān)牢的瞬間蟋定,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來泰國打工草添, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驶兜,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓远寸,卻偏偏與公主長得像抄淑,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驰后,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

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

  • 前言 好久不見肆资。 從這篇文章開始,我將帶大家走進(jìn)消息中間件的世界灶芝。 消息中間件本質(zhì)上就是一種很簡單的數(shù)據(jù)結(jié)構(gòu)——隊(duì)...
    柳樹之閱讀 3,500評(píng)論 3 23
  • 1. 介紹 最近在研究一些消息中間件郑原,常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一個(gè)基...
    aoho閱讀 8,935評(píng)論 1 16
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 2,989評(píng)論 1 3
  • 1. 分布式系統(tǒng)核心問題 參考書籍:《區(qū)塊鏈原理夜涕、設(shè)計(jì)與應(yīng)用》 一致性問題例子:兩個(gè)不同的電影院買同一種電影票犯犁,如...
    molscar閱讀 914評(píng)論 0 0
  • 體驗(yàn)入 今天開下班時(shí)來了一只邊牧看病,這時(shí)彥達(dá)女器,高鵬志榮大姐等都主動(dòng)來幫忙酸役,好快速解決問題 找核心 體諒,互助 轉(zhuǎn)...
    93650345d0d1閱讀 211評(píng)論 0 0