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)
|
}
|