Golang消息隊列之NSQ


NSQ

NSQ是一個實時分布式消息傳遞平台,設計用於大規模操作,能每天處理數十億條消息。

它促進了沒有單點故障的分布式和分散拓撲,支持容錯和高可用性,並提供可靠的消息傳遞保證。

優缺點
優點:
1、部署非常方便,沒有任何環境的依賴,一個二進制可執行文件
2、輕量級沒有過多的配置參數,只需要簡單配置即可直接使用
3、性能極高(基於go編寫)
4、消息不存在丟失的情況
缺點:
1、消息無順序
2、節點之間沒有消息復制
3、沒有鑒權

消息隊列場景

場景介紹來自於

異步執行

將注冊信息寫入數據庫成功后,同時進行發送注冊郵件和發送注冊短信的操作。而所有任務執行完成后,返回信息給客戶端。同串行方式相比,並行方式可以提高執行效率,減少執行時間。
並行方式:

異步方式:

應用解耦

場景說明:用戶下單以后,訂單系統需要通知庫存系統。

傳統的做法為:訂單系統調用庫存系統接口。如下圖所示:

傳統方式具有如下缺點:
1、假設庫存系統訪問失敗,則訂單減少庫存失敗,導致訂單創建失敗
2、訂單系統同庫存系統過度耦合

那么如何解決上述的缺點呢?需要引入消息隊列,引入消息隊列后的架構如下圖所示:

  • 訂單系統:用戶下單后,訂單系統進行數據持久化處理,然后將消息寫入消息隊列,返回訂單創建成功
  • 庫存系統:使用拉/推的方式,獲取下單信息,庫存系統根據訂單信息,進行庫存操作。

流量削鋒

應用場景:秒殺活動,一般會因為流量過大,導致流量暴增,應用掛掉。為解決這個問題,一般需要在應用前端加入消息隊列。

1、可以控制參與活動的人數;
2、可以緩解短時間內高流量對應用的巨大壓力;
流量削鋒處理方式系統圖如下:

  • 服務器在接收到用戶請求后,首先寫入消息隊列。這時如果消息隊列中消息數量超過最大數量,則直接拒絕用戶請求或返回跳轉到錯誤頁面;
  • 秒殺業務根據秒殺規則讀取消息隊列中的請求信息,進行后續處理。

NSQ組件

nsqd:一個守護進程,它接收、排隊並向客戶端發送消息
nsqlookupd:匯總節點信息,提供查詢和管理topic等服務
nsqadmin:管理端展示UI界面,能有一個web頁面去查看和操作

NSQ安裝

NSQ github

1.下載nsq軟件包

$ wget https://github.com/nsqio/nsq/releases/download/v1.2.0/nsq-1.2.0.linux-amd64.go1.12.9.tar.gz

2.啟動nsqlookupd

$ ./nsqlookupd &

3.啟動nsqd,並注冊到指定lookupd

$ ./nsqd -broadcast-address=127.0.0.1 -lookupd-tcp-address=127.0.0.1:4160 &

4.啟動nsqweb界面

$ ./nsqadmin --lookupd-http-address=127.0.0.1:4161 &

5.訪問nsqadmin
![](https://img2018.cnblogs.com/blog/1679739/202003/1679739-20200301162720259-1060774575.png)


免責聲明!

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



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