2015-03-24 41 views
0

我是來自Node世界的Go新手,我正在使用官方Bitly Go客戶端構建消費者。我使用AddConcurrentHandlers來產生50個goroutines來處理消息的消防水帶。問題在於我的客戶在nsq上留下了未處理/收到的消息的指數。有人遇到過這種情況麼?nsq go客戶端無法跟上

我建於節點同樣的事情,看看是否有一個服務器或NSQ配置問題和它能夠以最快的速度,因爲他們進來處理所有消息

Go代碼:

q, _ := nsq.NewConsumer("chat", "golangbetches", config) 

q.AddConcurrentHandlers(nsq.HandlerFunc(func(message *nsq.Message) error { 
    l.Debug("Got a message: %v", message) 
    message.Finish() 
    return nil 
}), 50) 

err := q.ConnectToNSQLookupd("<address here>") 
+4

你用什麼GOMAXPROCS? – JimB 2015-03-24 21:31:29

+0

你的意思是我給的AddConcurrentHandlers中的第二個參數? api所要求的,可能是爲了防止無限數量的例程 – 2015-03-24 21:44:21

+0

不,JimB詢問你的環境變量GOMAXPROCS。未設置或太低不會使用所有內核。嘗試將其設置爲2,4,8和12並觀察您的應用程序。 – Volker 2015-03-24 21:50:30

回答

3

cfg.MaxInFlight處理「的郵件數量上限這一comsumer實例將允許在飛行中...」更多細節在consumer source

設置cfg.MaxInFlight的東西合理使用,因爲它defaults to 1

一個配置示例是available in the documentation,它被設置爲1000.這可能適用於您的應用程序,也可能不適合您的應用程序;並且,您最好監控它,因爲配置錯誤可能導致truncated messages

+0

再次謝謝你!很好的答案! – 2015-03-25 00:01:41

+0

這裏應該有更清晰的文檔。 – 2015-03-25 00:02:17

+0

做一個PR,我相信他們會接受一些增強的文檔! – Momer 2015-03-25 00:07:49

0

加快的另一個方式去NSQ消費者可以在這裏找到:https://github.com/nsqio/go-nsq/issues/187

其中之一,這對我的作品,增加--max-rdy-count上nsqd,這使得增加消費者的--max_in_flight不是默認的2500甚至更高。