我有一个非常通用的连接脚本来连接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
将消息打印到终端的正确方法吗?或者这里有更大的问题吗?
答案 0 :(得分:2)
订阅为该频道上的事件创建异步侦听器。由于您的主函数在调用订阅后直接退出,程序将在异步过程完成之前编辑。还有同步订阅功能:
https://godoc.org/github.com/nats-io/go-nats#Conn.SubscribeSync
或者您可以在主方法中添加等待,以便它不会立即退出。
答案 1 :(得分:0)
假设您连接正常(最好在连接时捕获错误并进行检查),您正在退出程序,因为它不等待退出main,因为Subscribe在自己的Go例程中创建了异步订阅者。使用runtime.Goexit()让程序等待。与此example类似。