微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何循环通过通道收到的NATS消息

如何解决如何循环通过通道收到的NATS消息

我有这样的代码

package main


import (
    "fmt"

    "github.com/nats-io/nats.go"
)

func main()  {
    nc,_ := nats.Connect(nats.DefaultURL)
    for {
        nc.Subscribe("request",func(m *nats.Msg) {
            fmt.Printf("Received a message: %s\n",string(m.Data))
            m.Respond([]byte("Received"))
        })
    }
}

我想做的就是收到一条消息,并在收到消息后始终如示例中所示发送对消息的答复。

但是,上面的代码仍然存在一些问题。当我在代码添加for {时,它会重复同一条消息,直到收到新消息为止。

使用NATS连续接收消息的正确实现是什么? (不回复收到的消息)

解决方法

看来您最终将获得对该主题的无限订阅。您只需调用一次Subscribe方法。

首先,Subscribe方法返回了一些东西,我们应该保存Subscribe(...)方法中的值。

s,err := nc.Subscribe(subj,msgHandler)
// handle err
for {
 // if something happened,quit the loop
}
s.Unsubscribe()

msgHandle上有新消息时,将调用subj。因此,您只需要等待。创建订阅后,您可能会等待无限循环。

但是,我认为最好使用频道进行订阅。

// Channel Subscriber
ch := make(chan *nats.Msg,64)
sub,err := nc.ChanSubscribe("foo",ch)
// handle err
for msg := range ch {
    // do something to the nats.Msg object
}
// Unsubscribe if needed
sub.Unsubscribe()
close(ch)

请考虑阅读文档here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。