Клиент NATS в GoLang не будет подписываться - PullRequest
0 голосов
/ 09 мая 2018

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

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

0 голосов
/ 09 мая 2018

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

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

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

...