我想测试一个非常基本的NATS应用程序-- Kubernetes上的流。要做到这一点,我听从了官方NATS-docs的命令。
基本上可以归结为跑步
kubectl apply -f https://raw.githubusercontent.com/nats-io/k8s/master/nats-server/single-server-nats.yml
kubectl apply -f https://raw.githubusercontent.com/nats-io/k8s/master/nats-streaming-server/single-server-stan.yml在一个能够访问集群的终端中(在我的例子中,它是一个仁爱-cluster )。
我使用stan.go作为NATS流客户端.下面是我试图连接到NATS流服务器的代码:
package main
import stan "github.com/nats-io/stan.go"
func main() {
sc, err := stan.Connect("stan", "test-client")
if err != nil {
panic(err)
}
if err := sc.Publish("test-subject", []byte("This is a test-message!")); err != nil {
panic(err)
}
}这就是我所犯的错误:
panic: nats: no servers available for connection
goroutine 1 [running]:
main.main()
/Users/thilt/tmp/main.go:9 +0x15d
exit status 2所以我想是用了另一个名字来形容集群之类的。如果我使用上面docs.nats-链接中提供的nats-box示例,它也不起作用!我哪里出问题了?
如果需要的话,我很乐意提供更多的信息。
发布于 2021-05-10 08:30:30
// Connect to NATS
nc, err := nats.Connect(URL, opts...)
if err != nil {
log.Fatal(err)
}
defer nc.Close()
sc, err := stan.Connect(clusterID, clientID, stan.NatsConn(nc))
if err != nil {
log.Fatalf("Can't connect: %v.\nMake sure a NATS Streaming Server is running at: %s", err, URL)
}
defer sc.Close()发生错误是因为默认情况下stan连接到本地主机地址(源代码):
// DefaultNatsURL is the default URL the client connects to
DefaultNatsURL = "nats://127.0.0.1:4222"注意上面的例子覆盖了这个默认连接。
Stan源代码很短,易于分析。我真的建议你试着分析它,找出它的作用。
现在,让我们把它们放在一起;下面是一个有用的示例:
package main
import (
nats "github.com/nats-io/nats.go"
stan "github.com/nats-io/stan.go"
)
func main() {
// Create a NATS connection
nc, err := nats.Connect("nats://nats:4222")
if err != nil {
panic(err)
}
// Then pass it to the stan.Connect() call.
sc, err := stan.Connect("stan", "me", stan.NatsConn(nc))
if err != nil {
panic(err)
}
if err := sc.Publish("test-subject", []byte("This is a test-message!")); err != nil {
panic(err)
}
}https://stackoverflow.com/questions/67438050
复制相似问题