// Copyright 2019 getensh.com. All rights reserved. // Use of this source code is governed by getensh.com. package pb import ( fmt "fmt" "property-garden/parser" "time" "go.etcd.io/etcd/client/v3/naming/resolver" grpc "google.golang.org/grpc" "google.golang.org/grpc/keepalive" ) // 客户端集合 var Common CommonClient var System SystemClient var Household HouseholdClient var Thirdparty PropertyThirdpartyClient var Company CompanyClient var Device DeviceClient //var Charge ChargeClient func setupCompanyClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.Company.ServiceName } else { serviceName = parser.Conf.Rpc.Company.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.Company.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Company = NewCompanyClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial company conn err", err) } return } func setupThirdpartyClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.Thirdparty.ServiceName } else { serviceName = parser.Conf.Rpc.Thirdparty.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.Thirdparty.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Thirdparty = NewPropertyThirdpartyClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial thirdparty conn err", err) } return } func setupCommonClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.Common.ServiceName } else { serviceName = parser.Conf.Rpc.Common.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.Common.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Common = NewCommonClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial common conn err", err) } return } /* func setupChargeClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.Charge.ServiceName } else { serviceName = parser.Conf.Rpc.Charge.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.Charge.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Charge = NewChargeClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial device conn err", err) } return } */ func setupHouseholdClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.Household.ServiceName } else { serviceName = parser.Conf.Rpc.Household.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.Household.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Household = NewHouseholdClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial household conn err", err) } return } func setupSystemClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.System.ServiceName } else { serviceName = parser.Conf.Rpc.System.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.System.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { System = NewSystemClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial system conn err", err) } return } func setupDeviceClient(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string if parser.Conf.K8s { serviceName = parser.Conf.Rpc.Device.ServiceName } else { serviceName = parser.Conf.Rpc.Device.ServiceIp } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial(fmt.Sprintf("%s:%d", serviceName, parser.Conf.Rpc.Device.ServicePort), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Device = NewDeviceClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial device conn err", err) } return } func setupSystemClient2(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string serviceName = parser.Conf.Rpc.System.ServiceName builder, err := resolver.NewBuilder(parser.GetEtcdClient()) if err != nil { panic(err) } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial("etcd:///"+parser.Conf.Rpc.Prefix+"/"+serviceName, grpc.WithResolvers(builder), grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { System = NewSystemClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial system conn err", err) } return } func setupHouseholdClient2(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string serviceName = parser.Conf.Rpc.Household.ServiceName builder, err := resolver.NewBuilder(parser.GetEtcdClient()) if err != nil { panic(err) } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial("etcd:///"+parser.Conf.Rpc.Prefix+"/"+serviceName, grpc.WithResolvers(builder), grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Household = NewHouseholdClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial Household conn err", err) } return } func setupCommonClient2(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string serviceName = parser.Conf.Rpc.Common.ServiceName builder, err := resolver.NewBuilder(parser.GetEtcdClient()) if err != nil { panic(err) } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial("etcd:///"+parser.Conf.Rpc.Prefix+"/"+serviceName, grpc.WithResolvers(builder), grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Common = NewCommonClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial Common conn err", err) } return } func setupThirdpartyClient2(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string serviceName = parser.Conf.Rpc.Thirdparty.ServiceName builder, err := resolver.NewBuilder(parser.GetEtcdClient()) if err != nil { panic(err) } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial("etcd:///"+parser.Conf.Rpc.Prefix+"/"+serviceName, grpc.WithResolvers(builder), grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Thirdparty = NewPropertyThirdpartyClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial Thirdparty conn err", err) } return } func setupCompanyClient2(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string serviceName = parser.Conf.Rpc.Company.ServiceName builder, err := resolver.NewBuilder(parser.GetEtcdClient()) if err != nil { panic(err) } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial("etcd:///"+parser.Conf.Rpc.Prefix+"/"+serviceName, grpc.WithResolvers(builder), grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Company = NewCompanyClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial company conn err", err) } return } func setupDeviceClient2(kacp keepalive.ClientParameters, conns []*grpc.ClientConn) { // 根据是否为k8s来组装targets var serviceName string serviceName = parser.Conf.Rpc.Device.ServiceName builder, err := resolver.NewBuilder(parser.GetEtcdClient()) if err != nil { panic(err) } // 发起一个连接并记录连接conn,后期释放 if conn, err := grpc.Dial("etcd:///"+parser.Conf.Rpc.Prefix+"/"+serviceName, grpc.WithResolvers(builder), grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithKeepaliveParams(kacp)); err == nil { Device = NewDeviceClient(conn) conns = append(conns, conn) } else { fmt.Println("[rpc] dial device conn err", err) } return } // SetupClients 创建客户端 func SetupClients() (conns []*grpc.ClientConn) { // 客户端配置参数 var kacp = keepalive.ClientParameters{ // send pings every n seconds if there is no activity Time: time.Duration(parser.Conf.Rpc.Keepalive.ClientTime) * time.Second, // wait n second for ping ack before considering the connection dead Timeout: time.Duration(parser.Conf.Rpc.Keepalive.ClientTimeout) * time.Second, // send pings even without active streams PermitWithoutStream: true, } if len(parser.Conf.EtcdAddrs) == 0 { setupCommonClient(kacp, conns) setupSystemClient(kacp, conns) setupHouseholdClient(kacp, conns) setupThirdpartyClient(kacp, conns) setupCompanyClient(kacp, conns) setupDeviceClient(kacp, conns) return } setupCommonClient2(kacp, conns) setupSystemClient2(kacp, conns) setupHouseholdClient2(kacp, conns) setupThirdpartyClient2(kacp, conns) setupCompanyClient2(kacp, conns) setupDeviceClient2(kacp, conns) //setupChargeClient(kacp, conns) return }