Клиент NATS в GoLang не будет подписываться

У меня есть очень общий сценарий подключения для подключения к серверу 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 ответа

Решение

Подписаться создать асинхронный слушатель событий на этом канале. Когда ваша основная функция завершает работу сразу после вызова подписки, программа будет редактировать до завершения асинхронного процесса. Также есть синхронная функция подписки:

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

Или вы можете добавить ожидание в ваш основной метод, чтобы он не выходил сразу.

Предполагая, что вы подключаетесь нормально (лучше всего зафиксировать ошибку при подключении и проверить ее), вы выходите из программы, так как она не ждет выхода из main, так как Subscribe создает асинхронных подписчиков в их собственных подпрограммах Go. Используйте runtime.Goexit(), чтобы программа подождала. Аналогично этому примеру.

Другие вопросы по тегам