如何解决以最少的努力在 Kubernetes 中测试 NATS 流
我想在 Kubernetes 上测试一个非常基本的 NATS 流应用程序。为此,I followed the commands from the official 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
在可以访问集群的终端中(在我的例子中是一个 kind 集群)。
我使用 stan.go
作为 NATS-streaming-client。这是我尝试连接到 NATS-streaming-server 的代码:
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-link 中提供的带有 nats-Box
的示例,它也不起作用!我哪里出错了?
如果需要,我很乐意提供更多信息。
解决方法
有一个great example in stan.go docs:
// 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 连接到本地主机地址 (source code):
// 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)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。