如何解决如何循环通过通道收到的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 举报,一经查实,本站将立刻删除。