package grpc import ( "context" "time" "git.ikuban.com/server/kratos-nacos/registry" "git.ikuban.com/server/kratos-utils/http/middleware/logging" "github.com/go-kratos/kratos/v2/log" "github.com/go-kratos/kratos/v2/middleware" "github.com/go-kratos/kratos/v2/transport/grpc" grpc2 "google.golang.org/grpc" ) var connMap = make(map[string]*grpc2.ClientConn) type DialOption struct { Middlewares []middleware.Middleware Timeout time.Duration GrpcOptions []grpc2.DialOption } func GetDialInsecure( r *registry.Registry, logger log.Logger, clientName string, endpointNameKey string, option *DialOption) (*grpc2.ClientConn, error) { option = checkOption(option) if _, ok := connMap[clientName]; ok { return connMap[clientName], nil } endpoint := grpc.WithEndpoint(endpointNameKey) if logger != nil { option.Middlewares = append(option.Middlewares, logging.Client(logger)) } if r == nil { return nil, nil } conn, err := grpc.DialInsecure(context.Background(), endpoint, grpc.WithDiscovery(r), grpc.WithMiddleware(option.Middlewares...), grpc.WithTimeout(option.Timeout), grpc.WithOptions(option.GrpcOptions...), ) if err != nil { return nil, err } connMap[clientName] = conn return conn, nil } func checkOption(option *DialOption) *DialOption { if option == nil { option = &DialOption{ Middlewares: make([]middleware.Middleware, 0), Timeout: time.Second * 60, } } if option.Timeout.Milliseconds() == 0 { option.Timeout = time.Second * 60 } if len(option.GrpcOptions) == 0 { option.GrpcOptions = append(option.GrpcOptions, grpc2.WithDefaultCallOptions(grpc2.MaxCallRecvMsgSize(ReceiveMsgSize))) } return option }