nsq 消费消息有延迟, 怎么通过配置让 nsq 收到消息后, 订阅的消费者能够立即收到消息.

我简单部署了一下 nsqd+nsqlookupd

我的程序同时作为生产者(收到post请求后生产消息), 也作为消费者(消费post来的消息)
发消息到 nsqd.
消费消息通过 nsqlookupd 查询, 来获取消息.

测试发现了一个奇怪的现象.

有的时候, 我生产一个消息后, 消费者这边没有立即收到消息. 跟数据量没有关系, 量也不大, 就是测试 3-4 条消息而已.

可能是什么问题? 我nsq没有什么特殊的配置.

怎么配置让 nsq 及时性更好一些?

阅读 10.4k
2 个回答

我们在线上使用过程中也发现了这个问题,经过实际测试发现是在我们的使用过程中Consumer的默认MaxInFlight长度为1导致的。因为我们nsq是集群化使用,如果值为1,consumer仅处理一个nsqd单点消息(RDY 1),则会出现在另外的nsqd单点的消息需要很长时间被消费。

实际建议这个值应该大于等于实际的nsqd节点。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进