首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nsqjs客户端,没有立即从go-nsq服务器端接收消息。

nsqjs客户端,没有立即从go-nsq服务器端接收消息。
EN

Stack Overflow用户
提问于 2017-01-17 19:03:43
回答 1查看 892关注 0票数 1

尝试学习nsq,并学习这里是高朗的例子这里是nsqjs的例子。我在服务器端发送消息,执行w/ a for循环和go例程。

代码语言:javascript
复制
var wg sync.WaitGroup
for i := 0; i < 100; i++ {
    wg.Add(1)
    go func(x int) {
        defer wg.Done()

        chanName := fmt.Sprintf("import_progress_587e6442ff74889098498f6e")
        m := map[string]interface{}{
            "body": map[string]interface{}{
                "progress": x,
            },
        }
        msg, _ := json.Marshal(m)

        req := NSQPubReq{
            Topic: chanName,
            Body:  msg,
        }
        if err := producer.Publish(req.Topic, req.Body); err != nil {
        }
        utils.Info(fmt.Sprintf("sent msg=%v", string(msg)))

    }(i)
}

wg.Wait()

但问题是,在客户端。

代码语言:javascript
复制
// channel = 'import_progress_587e6442ff74889098498f6e'
let reader = new nsq.Reader(channel, channel, {
    //lookupdHTTPAddresses: '<<IP>>:4161',
    maxInFlight: 10000,
    snappy: true
})
reader.connect()

reader.on('message', (msg) => {
    var msgData = {
            id:     msg.id,
            body:   msg.body.toString(),
            chan:   channel
    }
    io.emit(channel, msgData)
    msg.finish()
})

这条信息不会马上传到客户那里。我将等待几秒钟,直到消息到达nodejs客户端。有什么我需要做的设置吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2017-01-19 14:02:42

nsqjs客户端接收到刚发布的消息的速度慢有几个原因:

  1. 如果主题是新的,并且主题的发现是通过nsqlookupd进行的,那么默认情况下,nsqjs将尝试每30秒发现一次新主题。 从上面的例子来看,看起来您正在为每个导入创建新的主题。我认为,如果您首先从Golang客户端开始发布消息,然后启动nsqjs客户端,那么您就不应该看到延迟。
  2. 如果有多个max-in-flight设置太低的nsqd,则将nsqjs Reader置于饥饿模式中,在nsqd之间移动RDY计数一段时间。 我不确定这是怎么回事,因为我不能告诉任何关于nsq拓扑的信息。只要您的最大飞行时间设置高于您所拥有的nsqd实例的数量,那么您将处于良好的状态。
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41704986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档