package directory import ( "github.com/rs/zerolog/log" "google.golang.org/grpc" ) type ServiceInstance struct { ID string `json:"id"` Type string `json:"type"` Label string `json:"label"` GrpcAddr string `json:"grpc_addr"` HttpAddr *string `json:"http_addr"` retryCount int } var connectionCache = make(map[string]*grpc.ClientConn) func (v *ServiceInstance) GetGrpcConn() (*grpc.ClientConn, error) { if conn, ok := connectionCache[v.ID]; ok { return conn, nil } conn, err := ConnectService(v) if err != nil { _ = RemoveServiceInstance(v.ID) log.Error().Str("id", v.ID).Err(err).Msg("Failed to connect to service, dropped...") return nil, err } else { connectionCache[v.ID] = conn } return conn, nil }