2015-03-24 95 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甚至更高。