GoLang 中的 NATS 客户端不会订阅
NATS Client in GoLang wont subscribe
我有一个非常通用的连接脚本来连接 nats 服务器,只是盲目地将消息打印到命令行。
package main
import (
"github.com/nats-io/go-nats"
"fmt"
)
func main(){
servers := "nats://URL:30401, nats://URL:30402, nats://URL:30403"
nc, _ := nats.Connect(servers, nats.Token("TOKEN_KEY"))
// Subscribe to AAPL trades
nc.Subscribe("T.AAPL", func(m *nats.Msg){
fmt.Printf("[TRADE] Received: %s\n", string(m.Data))
})
}
它构建良好并且运行没有错误,但实际上不会订阅。 fmt.Printf
是将消息打印到终端的正确方法吗?还是这里有更大的问题?
订阅为该频道上的事件创建一个异步侦听器。由于您的主要功能在调用订阅后立即退出,因此程序将在异步过程完成之前进行编辑。还有同步订阅功能:
https://godoc.org/github.com/nats-io/go-nats#Conn.SubscribeSync
或者您可以在 main 方法中添加一个等待,这样它就不会立即退出。
假设您连接正常(最好在连接时捕获错误并检查它)您正在退出程序,因为它不会等待退出 main,因为 Subscribe 在他们自己的 Go 例程中创建异步订阅者。使用 runtime.Goexit() 让程序等待。类似这样 example.
我有一个非常通用的连接脚本来连接 nats 服务器,只是盲目地将消息打印到命令行。
package main
import (
"github.com/nats-io/go-nats"
"fmt"
)
func main(){
servers := "nats://URL:30401, nats://URL:30402, nats://URL:30403"
nc, _ := nats.Connect(servers, nats.Token("TOKEN_KEY"))
// Subscribe to AAPL trades
nc.Subscribe("T.AAPL", func(m *nats.Msg){
fmt.Printf("[TRADE] Received: %s\n", string(m.Data))
})
}
它构建良好并且运行没有错误,但实际上不会订阅。 fmt.Printf
是将消息打印到终端的正确方法吗?还是这里有更大的问题?
订阅为该频道上的事件创建一个异步侦听器。由于您的主要功能在调用订阅后立即退出,因此程序将在异步过程完成之前进行编辑。还有同步订阅功能:
https://godoc.org/github.com/nats-io/go-nats#Conn.SubscribeSync
或者您可以在 main 方法中添加一个等待,这样它就不会立即退出。
假设您连接正常(最好在连接时捕获错误并检查它)您正在退出程序,因为它不会等待退出 main,因为 Subscribe 在他们自己的 Go 例程中创建异步订阅者。使用 runtime.Goexit() 让程序等待。类似这样 example.