package micro import ( "context" "github.com/gogf/gf/v2/container/gvar" "github.com/gogf/gf/v2/frame/g" consul "github.com/rpcxio/rpcx-consul/client" "github.com/smallnest/rpcx/client" "strings" ) // InitMicroSrvClient 获取微服务客户端,arg为可选参数,若有必须是两个,分别是:reg string, serverAddr string func InitMicroSrvClient(ctx context.Context, serviceName, key string, args ...string) (c client.XClient) { reg, _ := g.Config().Get(ctx, "service_registry.registry") etcdAddr, _ := g.Config().Get(ctx, "service_registry.server-addr") if len(args) == 2 { reg = gvar.New(args[0]) etcdAddr = gvar.New(args[1]) } config, _ := g.Config().Get(ctx, key) arr := strings.Split(config.String(), ",") srvName := arr[0] if len(arr) == 2 { // 点对点 直连 d, _ := client.NewPeer2PeerDiscovery("tcp@"+arr[1], "") c = client.NewXClient(serviceName, client.Failtry, client.RandomSelect, d, client.DefaultOption) return c } else { if reg.String() == "consul" { // 服务发现使用consul //d, _ := etcd_client.NewEtcdV3Discovery(srvName, serviceName, []string{etcdAddr}, nil) d, _ := consul.NewConsulDiscovery(srvName, serviceName, []string{etcdAddr.String()}, nil) //d, _ := client.NewConsulDiscovery(srvName, serviceName, []string{etcdAddr}, nil) c = client.NewXClient(serviceName, client.Failover, client.RoundRobin, d, client.DefaultOption) return c } } return nil }