package service import ( "basic.com/syncdb.git" "basic.com/valib/logger.git" "basic.com/valib/serf.git/client" "basic.com/valib/serf.git/cmd/serf/command/agent" "context" "github.com/mitchellh/cli" "vamicro/config" "vamicro/extend/util" ) //serf daemon进程,集群中只有主节点才会启动,非主节点处于停止状态。 func Start(ctx context.Context) error { clusterId := "" password := config.ClusterSet.PwdPre+"123456" var addrs []string conf := syncdb.DefaultConfig() conf.RPCAddr = "0.0.0.0" conf.RPCPort = 7474 conf.BindAddr = "0.0.0.0:30290" conf.Ctx = ctx agent, err := syncdb.Init(clusterId, password, config.Server.AnalyServerId, addrs, "./serf-daemon.json", conf) if err != nil { return err } agent.RegisterHandleEventFunc(HandleSerfEvent) logger.Debug("agent:", agent, "err:", err) return nil } func TestSerfRPC() { shutdownCh := make(chan struct{}) doneCh := make(chan struct{}) defer func() { close(shutdownCh) <-doneCh }() ui := new(cli.MockUi) c := &agent.Command{ ShutdownCh: shutdownCh, Ui: ui, } ip, _, _ := util.GetLocalIP(config.Server.NetworkAdapter) rpcAddr := ip + ":7373" args := []string { "-bind", ip, "-rpc-addr", rpcAddr, } go func() { code := c.Run(args) if code != 0 { logger.Debug("run serf Command code:", code) } close(doneCh) }() rpcClient, err := client.NewRPCClient(rpcAddr) if err != nil { logger.Debug("client.NewRPCClient err:", err) return } members, err := rpcClient.Members() if err != nil { logger.Debug("rpc members err:", err) } logger.Debug("len(members):", len(members)) param := client.QueryParam{ FilterNodes: []string{}, Name: "", Payload: []byte(""), } rpcClient.Query(¶m) }