nsq go 客户端跟不上

nsq go client can't keep up

我是来自 Node 世界的 Go 新手,我正在使用官方的 Bitly Go 客户端构建一个消费者。我正在使用 AddConcurrentHandlers 生成 50 个 goroutine 来处理大量消息。问题是我的消费者落后了,在 nsq 上留下了指数级的 unprocessed/received 消息。有没有其他人遇到过这个?

我在 Node 中构建了同样的东西,看看是否存在服务器或 NSQ 配置问题,以及它是否能够在所有消息传入时尽快处理它们。

转到代码:

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>")

cfg.MaxInFlight 处理,"maximum number of messages this comsumer instance will allow in-flight..." consumer source

中提供了更多详细信息

cfg.MaxInFlight 设置为合理的值,因为它 defaults to 1

示例配置为 available in the documentation where it is set to 1000. This may or may not be suitable for your application; and, you'd do well to monitor it, as a misconfiguration may result in truncated messages

另一种加速 go nsq 消费者的方法可以在这里找到:https://github.com/nsqio/go-nsq/issues/187

其中一个对我有用,它在 nsqd 上增加 --max-rdy-count,这允许增加消费者的 --max_in_flight 甚至高于默认的 2500。