我是来自Node世界的Go新手,我正在使用官方的Bitly Go客户端构建消费者。我正在使用AddConcurrentHandlers来生成50个goroutine来处理消息的消防软管。问题是我的消费者落后于在nsq上留下指数未处理/接收的消息。还有其他人遇到过这个吗?
我在Node中构建了同样的东西,看看是否存在服务器或NSQ配置问题,并且能够尽快处理所有消息。
GO CODE:
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>")
答案 0 :(得分:4)
cfg.MaxInFlight
处理“此comsumer实例允许的最大邮件数量...”consumer source
将cfg.MaxInFlight
设置为合理的,defaults to 1
示例配置为available in the documentation,其中设置为1000.这可能适用于您的应用程序,也可能不适合您的应用程序;并且,您最好对其进行监控,因为错误配置可能会导致truncated messages。
答案 1 :(得分:0)
另一种加速nsq消费者的方法可以在这里找到:https://github.com/nsqio/go-nsq/issues/187
其中一个对我有用,在nsqd上增加--max-rdy-count
,这样可以增加消费者的--max_in_flight
甚至高于默认的2500。