[TOC]
> NSQ是Go語言編寫的一個開源的實時分布式內存消息隊列,其性能十分優異
## 安裝NSQ服務端
### 下載地址
> https://nsq.io/deployment/installing.html 下載linux最新穩定版
### 啟動nsqlookupd
> 主要負責服務發現 負責nsqd的心跳、狀態監測,給客戶端、nsqadmin提供nsqd地址與狀態
~~~
./nsqlookupd
~~~
### 啟動nsqd
> 負責接收消息,存儲隊列和將消息發送給客戶端
~~~
./nsqd --lookupd-tcp-address=127.0.0.1:4160
~~~
### 啟動nqsadmin
> nsqadmin是一個web管理界面,訪問地址 http://localhost:4171/
~~~
./nsqadmin --lookupd-http-address=127.0.0.1:4161
~~~
## 生產者 (nsq-send.go)
~~~
package main
import (
"github.com/nsqio/go-nsq"
"fmt"
"strconv"
)
var (
//nsqd的地址,使用了tcp監聽的端口
tcpNsqdAddrr = "127.0.0.1:4150"
)
func main() {
//初始化配置
config := nsq.NewConfig()
for i := 0; i < 100; i++ {
//創建100個生產者
tPro, err := nsq.NewProducer(tcpNsqdAddrr, config)
if err != nil {
fmt.Println(err)
}
//主題
topic := "topic_demo"
//主題內容
tCommand := "new data!" + strconv.Itoa(i)
//發布消息
err = tPro.Publish(topic, []byte(tCommand))
if err != nil {
fmt.Println(err)
}
}
}
~~~
## 消費者 (nsq-receive.go)
> 測試服務器上可執行`go run nsq-receive.go`進行測試
> 正式服務器上,需先進行打包`go build nsq-receive.go`后,再使用`nohup ./nsq-receive &`或者`supervisor`進行運行
~~~
package main
import (
"fmt"
"time"
"github.com/nsqio/go-nsq"
)
// 消費者
type ConsumerT struct{}
// 主函數
func main() {
InitConsumer("topic_demo", "test-channel", "127.0.0.1:4161")
for {
time.Sleep(time.Second * 10)
}
}
//處理消息
func (*ConsumerT) HandleMessage(msg *nsq.Message) error {
fmt.Println("receive", msg.NSQDAddress, "message:", string(msg.Body))
return nil
}
//初始化消費者
func InitConsumer(topic string, channel string, address string) {
cfg := nsq.NewConfig()
cfg.LookupdPollInterval = time.Second //設置重連時間
c, err := nsq.NewConsumer(topic, channel, cfg) // 新建一個消費者
if err != nil {
panic(err)
}
c.SetLogger(nil, 0) //屏蔽系統日志
c.AddHandler(&ConsumerT{}) // 添加消費者接口
//建立NSQLookupd連接
if err := c.ConnectToNSQLookupd(address); err != nil {
panic(err)
}
}
~~~
- 基礎知識
- 開發環境
- 包名規則
- 包初始化 (init)
- 基礎數據類型
- 基礎類型轉換
- 格式化輸出
- go指針
- 流程控制語句
- 函數定義
- 匿名函數
- 數組和切片
- map集合
- 結構體
- Interface接口
- 日期處理
- 數學計算
- 正則表達式
- 協程 (并發處理)
- channel
- waitgroup
- mutex (鎖機制)
- websocket
- protobuf
- Redis
- 錯誤處理
- 打包程序
- NSQ消息隊列
- 單元測試
- beego
- 安裝入門
- Gin
- 快速入門
- 路由與控制器
- 處理請求參數
- 表單驗證
- 處理響應結果
- 渲染HTML模版
- 訪問靜態文件
- Gin中間件
- Cookie處理
- Session處理
- Gin上傳文件
- swagger
- pprof性能測試
- GORM
- 入門教程
- 模型定義
- 數據庫連接
- 插入數據
- 查詢數據
- 更新數據
- 刪除數據
- 事務處理
- 關聯查詢
- 屬于 (BELONG TO)
- 一對一 (Has One)
- 一對多 (Has Many)
- 多對多 (Many to Many)
- 預加載 (Preloading)
- 錯誤處理
- 第三方常用插件
- viper 讀取配置文件
- zap 高性能日志
- Nginx代理配置
- Goland 快捷鍵