nsq 消费消息有延迟, 怎么通过配置让 nsq 收到消息后, 订阅的消费者能够立即收到消息.
我简单部署了一下 nsqd+nsqlookupd
我的程序同时作为生产者(收到post请求后生产消息), 也作为消费者(消费post来的消息)
发消息到 nsqd.
消费消息通过 nsqlookupd 查询, 来获取消息.
测试发现了一个奇怪的现象.
有的时候, 我生产一个消息后, 消费者这边没有立即收到消息. 跟数据量没有关系, 量也不大, 就是测试 3-4 条消息而已.
可能是什么问题? 我nsq没有什么特殊的配置.
怎么配置让 nsq 及时性更好一些?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我们在线上使用过程中也发现了这个问题,经过实际测试发现是在我们的使用过程中Consumer的默认MaxInFlight长度为1导致的。因为我们nsq是集群化使用,如果值为1,consumer仅处理一个nsqd单点消息(RDY 1),则会出现在另外的nsqd单点的消息需要很长时间被消费。
实际建议这个值应该大于等于实际的nsqd节点。
一开始,生产者没发布消息,消费者通过nsqlookupd找不到到topic的发送者nsqd( got response 404 Not Found "{"message":"TOPIC_NOT_FOUND"}"
),然后去轮询,直到生产者发布消息后 才能找到nsqd节点后才会把消息一次性收到,这个延迟应该是轮询时休息的时间