高效能訊息中介軟體 NSQ 解析 應用實踐

2021-10-22 05:09:30 字數 3122 閱讀 4860

nsq 是用 go 語言開發的輕量級的分布式訊息佇列,適合小型專案使用、用來學習訊息佇列實現原理,對於學習 go channel的原理和用法,以及如何用 go 語言來寫分布式是乙個很不錯的入門專案。

# 啟動nsqlookupd

$ nsqlookupd

# 啟動 nsqd

$ nsqd --lookupd-tcp-address=127.0.0.1:4160

# 啟動 nsqadmin

# 建立topic,傳送訊息

$ curl -d 'hello world 1' ''

# 啟動nsq_to_file

# 發布訊息到 nsqd

$ curl -d 'hello world 2' ''

$ curl -d 'hello world 3' ''

在本地按照上述步驟就可以跑起來了。

建立生產者

安裝好 nsq 的幾個服務之後,我們來實現基於 nsq 的生產和消費示例。首先是建立生產者:

}生產者的邏輯比較簡單,基於 nsq 官方提供的github.com/nsqio/go-nsq包,通過呼叫,迴圈寫 1000 個字元+數字,即 num-n 的形式,通過 p.publish 傳送到訊息佇列中,等待消費。

消費者接著,我們建立消費者:consumer.go 來消費剛剛生產的訊息。

// 1.直連nsqd

// err := c.connecttonsqd("127.0.0.1:4150")

// 2.通過 nsqlookupd 服務發現

err := c.connecttonsqlookupd("127.0.0.1:4161")

if err != nil 

wg.wait()

}可通過兩種方式與 nsqd 連線:

消費訊息的動作,主要邏輯就是列印出來,實際業務中需要進行其他處理。

執行結果

依次啟動生產者和消費者的服務,可以分別看到如下的輸出結果:

$go run producer.go

2020/12/28 20:29:51 pub:num-0

2020/12/28 20:29:51 inf    1 (127.0.0.1:4150) connecting to nsqd

2020/12/28 20:29:52 pub:num-1

2020/12/28 20:29:53 pub:num-2

2020/12/28 20:29:54 pub:num-3

2020/12/28 20:29:55 pub:num-4

2020/12/28 20:29:56 pub:num-5

2020/12/28 20:29:57 pub:num-6

2020/12/28 20:29:58 pub:num-7

2020/12/28 20:29:59 pub:num-8

2020/12/28 20:30:00 pub:num-9

2020/12/28 20:30:01 pub:num-10

$ go run consumer.go

2020/12/28 20:30:08 inf    1 [testtopic/ch] querying nsqlookupd 

2020/12/28 20:30:08 inf    1 [testtopic/ch] (10.236.92.208:4150) connecting to nsqd

2020/12/28 20:30:08 got a message: num-0

2020/12/28 20:30:08 got a message: num-1

2020/12/28 20:30:08 got a message: num-2

2020/12/28 20:30:08 got a message: num-3

2020/12/28 20:30:08 got a message: num-4

2020/12/28 20:30:08 got a message: num-5

2020/12/28 20:30:08 got a message: num-6

2020/12/28 20:30:08 got a message: num-7

2020/12/28 20:30:08 got a message: num-8

2020/12/28 20:30:08 got a message: num-9

2020/12/28 20:30:08 got a message: num-10

通過如上的示例,我們已經成功地實現 nsq 的應用。下面我們將解析 nsq 的幾個核心部分。

推薦閱讀

高效能訊息中介軟體 nsq 解析-介紹

如何使用 go 更好地開發併發程式,純乾貨!

幾款符合 opentracing 規範的分布式鏈路追蹤元件介紹與選型

訊息中介軟體

1.訊息的優先順序 2.訊息排序 3.訊息過濾 4.訊息持久化 5.訊息重試 6.事務的支援 7.broker滿 生產者,佇列,消費者 訊息佇列的優點 1 解耦2 非同步訊息,系統響應 在jms中,有兩種訊息模型 點對點模式和發布訂閱模式。1.在點對點模式中 有三種角色 1 訊息佇列,傳送者,接受者...

訊息中介軟體

如何理解訊息中介軟體?訊息中介軟體是儲存訊息的乙個容器,與資料庫不同的是資料庫儲存的資料是可以被修改的,而訊息中介軟體一般不會被修改 訊息中介軟體在消費的生產者與消費者產生,相當於乙個中間人的角色,提供了路由保證訊息的傳遞,如果消費者不能及時接收,訊息會保留下來,知道消費者上線 保證在存活期內 訊息...

訊息中介軟體

訊息中介軟體是在訊息的傳輸過程中儲存訊息 訊息傳遞過程中不能更改 的容器。訊息中介軟體再將訊息從它的原中繼到它的目標時充當中間人的作用。訊息中介軟體的主要目的是提供路由並保證訊息的傳遞 如果傳送訊息時接收者不可用,訊息佇列會保留訊息,知道可以成功傳遞為止,當然,訊息佇列儲存訊息也是有期限的。訊息傳送...