为了账号安全,请及时绑定邮箱和手机立即绑定

Serf 客户端无法连接到本地运行的 RPC 客户端

Serf 客户端无法连接到本地运行的 RPC 客户端

Go
天涯尽头无女友 2022-06-01 16:37:12
我正在像这样初始化我的代理:    conf := serf.DefaultConfig()    conf.NodeName = "node-a"    conf.MemberlistConfig.BindAddr = "127.0.0.1"    conf.MemberlistConfig.BindPort = 6666    conf.MemberlistConfig.AdvertiseAddr = "127.0.0.1"    conf.MemberlistConfig.AdvertisePort = 6666我还有一个客户端代码试图连接到 RPC 客户端:    c, err := client.NewRPCClient("127.0.0.1:7373")    if err != nil {        fmt.Println("error creating RCP Client:", err)        return    }我启动我的代理,我看到了这个输出:2020/05/06 07:15:18 [INFO] serf: EventMemberJoin: node-a 127.0.0.1[{node-a 127.0.0.1 6666 map[] alive 1 5 2 2 5 4}]当我启动我的客户时,我得到了这个:error creating RCP Client: dial tcp 127.0.0.1:7373: connect: connection refused如果我使用 CLI 启动代理,如下所示:serf agent -bind=0.0.0.0:6667 -advertise=0.0.0.0:6667 -join=0.0.0.0:6666 -node=agent-2 -log-level=debug并运行我的客户端代码,它会连接到 RPC 客户端。我确信我的代码或我对 Serf 工作原理的理解存在错误。
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

这是因为当您在 Go 中运行 serf 时serf.Create(我假设您将上述配置传递给),它只会启动与配置中提到的端口的连接,而不会启动 RPC 服务。


但是,当serf agent它运行时,它还会在端口 7373 上生成一个侦听器。


这是我假设您正在为代理运行的程序:


package main


import (

    "fmt"

    "github.com/hashicorp/serf/serf"

    "os"

    "os/signal"

    "syscall"

    "time"

)


func main() {

    c := make(chan os.Signal)

    signal.Notify(c, os.Interrupt, syscall.SIGTERM)

    go func() {

        <-c

        fmt.Println("\r- Ctrl+C pressed")

        os.Exit(0)

    }()


    conf := serf.DefaultConfig()

    conf.NodeName = "node-a"

    conf.MemberlistConfig.BindAddr = "127.0.0.1"

    conf.MemberlistConfig.BindPort = 6666

    conf.MemberlistConfig.AdvertiseAddr = "127.0.0.1"

    conf.MemberlistConfig.AdvertisePort = 6666

    serf.Create(conf)

    for {

        fmt.Println("- Sleeping")

        time.Sleep(10 * time.Second)

    }

}

使用netcat,你可以看到是这样的:


#running my go program

$ nc localhost 7373 -v

nc: connectx to localhost port 7373 (tcp) failed: Connection refused

nc: connectx to localhost port 7373 (tcp) failed: Connection refused

如果该 TCP 端口已绑定,则与此输出对比:


#running serf agent

$ nc localhost 7373 -v

Connection to localhost port 7373 [tcp/*] succeeded!


查看完整回答
反对 回复 2022-06-01
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

我终于明白我做错了什么。

我的目标是拥有一个 Serf 集群并使节点相互通信。为此,我必须像我一样启动 serf 服务,但不需要客户端,节点在加入集群后相互通信。

我将按照我尝试的方式使用 Serf 客户端,前提是我通过 Serf cli 启动 Serf 代理。


查看完整回答
反对 回复 2022-06-01
  • 2 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信