1

我是来自 Node 世界的 Go 新手,我正在使用官方 Bitly Go 客户端构建消费者。我正在使用 AddConcurrentHandlers 生成 50 个 goroutine 来处理消息的消防软管。问题是我的消费者落后于在 nsq 上留下指数级的未处理/接收到的消息。有人遇到过这种情况么?

我在 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>")
4

2 回答 2

4

cfg.MaxInFlight处理“此消费者实例在运行中允许的最大消息数......”更多详细信息可在消费者源中获得

设置cfg.MaxInFlight为合理的值,因为它默认为 1

文档中提供了一个示例配置,它设置为 1000。这可能适合也可能不适合您的应用程序;并且,您最好对其进行监控,因为配置错误可能会导致消息被截断

于 2015-03-24T23:57:01.740 回答
0

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

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

于 2016-11-22T08:06:52.573 回答