GoLang的NATS客户端不会订阅

时间:2018-05-09 18:16:12

标签: go nats.io

我有一个非常通用的连接脚本来连接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将消息打印到终端的正确方法吗?或者这里有更大的问题吗?

2 个答案:

答案 0 :(得分:2)

订阅为该频道上的事件创建异步侦听器。由于您的主函数在调用订阅后直接退出,程序将在异步过程完成之前编辑。还有同步订阅功能:

https://godoc.org/github.com/nats-io/go-nats#Conn.SubscribeSync

或者您可以在主方法中添加等待,以便它不会立即退出。

答案 1 :(得分:0)

假设您连接正常(最好在连接时捕获错误并进行检查),您正在退出程序,因为它不等待退出main,因为Subscribe在自己的Go例程中创建了异步订阅者。使用runtime.Goexit()让程序等待。与此example类似。