gpt4 book ai didi

go - 如何循环通过 channel 接收的 NATS 消息

转载 作者:行者123 更新时间:2023-12-01 22:33:29 24 4
gpt4 key购买 nike

我有这样的代码:

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(...) 中的值。方法。

s, err := nc.Subscribe(subj, msgHandler)
// handle err
for {
// if something happened, quit the loop
}
s.Unsubscribe()
msgHandle将在 subj 上有新消息时调用.所以你只需要等待。创建订阅后,您可能会等待无限循环。
但是,我认为使用 channel 进行订阅会更好。
// 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 .

关于go - 如何循环通过 channel 接收的 NATS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63647226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com